嗨,我正在制作一个关于用炮塔射击敌人的游戏,我想慢慢转动玩家的炮塔,所以我使用以下代码:
#if the angle is larger than the playerangle
if getangle() > playerangle:
playerangle += 1
#if the angle is smaller than the playerangele
elif getangle() < playerangle:
playerangle -= 1
#draw the player
player(playerangle)
但不知何故,炮塔并不总是选择最短的路径:角度从0到-269,它转错了方向。我如何解决这个问题
如果需要函数getangle()和player()的代码,请点击这里:
def player(angle):
pos_org = [width/2, height/2]
image_rotated = pygame.transform.rotate(playericon, -angle)
pos_new = (pos_org[0] - image_rotated.get_rect().width / 2, pos_org[1] - image_rotated.get_rect().height / 2)
screen.blit(image_rotated, pos_new)
def getangle():
x = width/2
y = height/2
mousex, mousey = pygame.mouse.get_pos()
angle = math.atan2((y-mousey), (x-mousex))*180/math.pi
return int(angle - 90)
^{} 返回范围为-pi,pi的角度。问题可能是由从pi到-pi的转换引起的
你知道从中心到鼠标的向量
你知道玩家当前的方向:
计算法线(Perpendicular)方向到当前目标方向的距离
并计算当前方向和目标方向法线之间的Dot product:
由于点积与2个向量之间的角度的余弦成正比,因此可以根据
dot_p_n
的符号改变角度:请参见示例:
相关问题 更多 >
编程相关推荐