Python / Pygame中的角度运动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python / Pygame中的角度运动相关的知识,希望对你有一定的参考价值。

我和一些朋友正在搞一个新的射击技师。这个想法是,如果你点击鼠标左键,你的角色向左旋转,如果你点击右边,玩家向右旋转,如果你点击两个,玩家就会向后移动。这是我们的代码:

if char_image_number == (0, 0, 0):
        char_image = pygame.image.load(player_none).convert_alpha()
        char_image = pygame.transform.rotate(char_image, angle)

        screen.blit(char_image,(540, 260))
        pygame.display.update()

elif char_image_number == (1, 0, 0):
        print (angle)
        char_image = pygame.image.load(player_left).convert_alpha()
        angle+=1
        char_image = pygame.transform.rotate(char_image, angle)
        bullets.append(
        screen.blit(char_image,(540, 260))
        pygame.display.update()

elif char_image_number == (0, 0, 1):
        print (angle)
        angle-=1
        char_image = pygame.image.load(player_right).convert_alpha()
        char_image=pygame.transform.rotate(char_image, angle)

        screen.blit(char_image,(540, 260))

        pygame.display.update()
elif char_image_number == (1, 0, 1):
        char_image = pygame.image.load(player_both).convert_alpha()
        char_image = pygame.transform.rotate(char_image, angle)

        screen.blit(char_image,(540, 260))
        pygame.display.update()

从当前角度来看,我们如何能够让它倒退?

答案

这是一个数学问题。向后推动图像的任何偏移都将是x和y的复合偏移。这需要三角学来弄清楚。

在你的情况下,在trig,sin(angle) = delta_y / distance_moved

cos(angle) = delta_x / distance_moved

你需要做的是取distance_moved,你希望图像每帧移动多少像素,然后乘以角度的sincos。这将找出你需要偏移精灵的y和x的变化。

在Python和许多其他语言中,您将需要以弧度为单位的角度(非常标准的单位)。该数学单位在一个Pi中表示180度。要将度数转换为弧度,请除以180并乘以Pi。

在Python中:

import math

def convert_degrees(degrees):
    return degrees / 180.0 * math.pi

罪与cos的例子:

import math
example = 2.0 * math.sin(math.pi) 
example2 = 3.0 * math.cos(convert_degrees(120))

我会把剩下的留给你来弄清楚。

以上是关于Python / Pygame中的角度运动的主要内容,如果未能解决你的问题,请参考以下文章

Python/Pygame 游戏循环问题/让代码运行

Pygame 生涩的玩家运动

Python Pygame找到两点之间的角度

python的pygame模拟太阳-地球-月亮-金星等动态示意图代码分析

Pygame碰撞检测

用Python实现一个实时运动的大挂钟效果