繁体   English   中英

pygame随机地形运动

[英]Pygame Random Terrain Movement

我正在尝试创建一个游戏,其中当玩家移动时屏幕上会移动岩石,因为玩家居中于屏幕中央,而地形却代替了玩家移动。 我的问题是,每当按下一个键时,大约只有一半的岩石会向上移动2个像素,放开时,它们会回到原始状态。 这是用于控制地形移动的播放器更新功能的代码,其中obxoby是移动时添加到地形上的坐标:

    if forward == True:
        grassx += 2
        obx += 2
        self.forward_walk += 1
        if 15 >= self.forward_walk >= 0:
            self.image = pygame.image.load("person_left_walk_1.png")
        if 30 >= self.forward_walk >= 15:
            self.image = pygame.image.load("person_left_walk_2.png")
        if self.forward_walk >= 30:
            self.forward_walk = 0
    if back == True:
        grassx -= 2
        obx -= 2
        self.backward_walk += 1
        if 15 >= self.backward_walk >= 0:
            self.image = pygame.image.load("person_right_walk_1.png")
        if 30 >= self.backward_walk >= 15:
            self.image = pygame.image.load("person_right_walk_2.png")
        if self.backward_walk >= 30:
            self.backward_walk = 0
    if up == True:
        grassy += 2
        oby += 2
        self.up_walk += 1
        if 15 >= self.up_walk >= 0:
            self.image = pygame.image.load("person_back_walk_1.png")
        if 30 >= self.up_walk >= 15:
            self.image = pygame.image.load("person_back_walk_2.png")
        if self.up_walk >= 30:
            self.up_walk = 0
    if down == True:
        grassy -= 2
        oby -= 2
        self.down_walk += 1
        if 15 >= self.down_walk >= 0:
            self.image = pygame.image.load("person_down_walk_1.png")
        if 30 >= self.down_walk >= 15:
            self.image = pygame.image.load("person_down_walk_2.png")
        if self.down_walk >= 30:
            self.down_walk = 0

这是岩石类,它使用上一个函数的obx和oby(它们是全局变量):

class Obstacle(pygame.sprite.Sprite):
original_x = 0
original_y = 0
def __init__(self,image,x,y):
    pygame.sprite.Sprite.__init__(self)
    self.image = pygame.image.load(image)
    self.rect = self.image.get_rect()
    self.rect.x = x
    self.rect.y = y
    self.original_x = self.rect.x
    self.original_y = self.rect.y
    self.mask = pygame.mask.from_surface(self.image)

def update(self):
    self.rect.x = self.original_x + obx
    self.rect.y = self.original_y + oby

询问我是否需要任何进一步的信息。 谢谢!

您至少在update功能中需要使变量obxoby局部变量。 您每次想移动障碍物时都需要调用update函数。

class Obstacle...
...
    def update(self, obx, oby):
        ...

接着

if forward == True:
    grassx += 2
    obx += 2
    Obstacle_instance.update(obx,0)
        ...

等等

很抱歉,我无法提供这种情况的深入解释,但我想您的主要问题是update功能的位置。 我的猜测是,更新函数将对其进行更新,然后全局变量将变回原样,更新函数将相应地移动对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM