我知道以前曾经问过这样的问题,但是我对编程非常陌生,我不太理解这些术语。我前不久发布了这个问题,并因我做了和不应该做的事情而受到批评。我没有正确解释问题,并且投票失败。因此,我删除了问题(甚至还得到了该笑声的徽章)。我会尽力解释这个问题。
我有一个程序,使图像(程序中称为“英雄”)能够移动和旋转。我对这部分非常了解。现在,我要我的英雄发射箭。我有一个大小合适的箭头图像。我知道如何在屏幕上我的英雄的位置将其旋转并旋转。现在,我希望箭头向点击鼠标的方向发射。请说明我该怎么做。这是完整的代码(仅供参考)
import pygame, sys, math
from pygame.locals import *
pygame.init()
width, height = 640, 480
keys = [False, False, False, False]
heropos = [100,100]
displaysurface = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Game")
hero = pygame.image.load("resources/images/dude.png")
bground = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
arrow = pygame.image.load("resources/images/bullet.png")
while True:
displaysurface.fill(0)
for x in range(width//bground.get_width()+1):
for y in range(height//bground.get_height()+1):
displaysurface.blit(bground,(x*100,y*100))
displaysurface.blit(castle,(0,30))
displaysurface.blit(castle,(0,135))
displaysurface.blit(castle,(0,240))
displaysurface.blit(castle,(0,345))
position = pygame.mouse.get_pos()
angle = math.atan2(position[1]-(heropos[1]),position[0]-(heropos[0]))
herorot = pygame.transform.rotate(hero, 360-angle*57.29)
heropos1 = herorot.get_rect(center=heropos)
displaysurface.blit(herorot, heropos1)
pygame.display.update()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == K_UP:
keys[0] = True
elif event.key == K_LEFT:
keys[1] = True
elif event.key == K_DOWN:
keys[2] = True
elif event.key == K_RIGHT:
keys[3] = True
if event.type == pygame.KEYUP:
if event.key == K_UP:
keys[0] = False
elif event.key == K_LEFT:
keys[1] = False
elif event.key == K_DOWN:
keys[2] = False
elif event.key == K_RIGHT:
keys[3] = False
if keys[0]:
heropos[1] -= 5
elif keys[2]:
heropos[1] += 5
if keys[1]:
heropos[0] -= 5
elif keys[3]:
heropos[0] += 5
更新:
我已被告知这可能是另一个问题的重复。让我解释一下。我不明白我需要应用的数学。请说明如何完成。我在等你的帮助。例如,为什么对x做cos,对y做sin?请解释。