如何通过单击鼠标将精灵朝所需的方向移动?

时间:2018-07-29 09:54:05

标签: python pygame

我知道以前曾经问过这样的问题,但是我对编程非常陌生,我不太理解这些术语。我前不久发布了这个问题,并因我做了和不应该做的事情而受到批评。我没有正确解释问题,并且投票失败。因此,我删除了问题(甚至还得到了该笑声的徽章)。我会尽力解释这个问题。

我有一个程序,使图像(程序中称为“英雄”)能够移动和旋转。我对这部分非常了解。现在,我要我的英雄发射箭。我有一个大小合适的箭头图像。我知道如何在屏幕上我的英雄的位置将其旋转并旋转。现在,我希望箭头向点击鼠标的方向发射。请说明我该怎么做。这是完整的代码(仅供参考)

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?请解释。

0 个答案:

没有答案