如何旋转和移动播放器以及如何制作滚动地图?

时间:2019-01-31 04:51:31

标签: python pygame

我正在使用pygame,random和math模块在python中编写2D游戏,并且在代码方面遇到一些问题。我一直在互联网上寻找帮助,但是找不到我正在寻找的帮助。我可以旋转播放器,但它们会失去质量并变得模糊。另外,我需要一些方法汤姆按W或向上前进的球员面对的方向,然后按s或向下向后移动玩家面对的方向,我知道我必须使用三角学和载体,但如何?而且我的滚动地图没有根据两个玩家在显示屏内的平均x和y坐标跟随它们。就像您知道我的僵尸是隐形的一样。这不是完整的代码,相关的部分是播放器类,地图和相机功能,旋转功能以及调用这些功能的其他片段:

http://localhost:8000/api/posts/1/

1 个答案:

答案 0 :(得分:1)

旋转位图时,除非它成90度(或多个)角度,否则会损失一点质量。

旋转代码获取当前播放器的位图,并将其反复旋转。每次旋转都会降低质量。

更好的方法是跟踪总旋转,然后通过一次操作旋转位图的原始副本。

例如,rotate()函数以5度间隔运行。

def newRotate():
    player.modifyRotation(5)
    player.image = player.original_image.copy()
    player.image = pygame.transform.rotate( player.image, player.getRotation() )
    ...

modifyRotation()可能类似于:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        self.original_image = personImg2
        self.image = self.original_image.copy()
        self.rect = self.image.get_rect()
        self.angle = 0
        ...

    def modifyRotation(self, degrees):
        self.angle += degrees

    def getRotation(self):
        return self.angle

OP的代码混合了对ePlayer类成员变量的访问和更改。如果Player类具有自己的rotate()函数来内部处理所有这些操作,则可能会更好。

当然,假设以5度为增量的常数集,另一种方法是在开始时预旋转所有播放器位图。我希望这也会更有效率。位图旋转在计算上是昂贵的。