Pygame 随机地形移动
Pygame Random Terrain Movement
我正在尝试创建一个游戏,其中屏幕上的岩石会随着玩家移动而移动,因为玩家位于屏幕中心,而不是玩家移动,地形会移动。我遇到的问题是,每当按下一个键时,大约只有一半的岩石会向上移动 2 个像素,而当松开时,它们会恢复到原始状态。下面是控制地形移动的播放器更新函数的代码,其中obx
和oby
是移动时添加到地形上的坐标:
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
这就是石头class,它使用了之前函数中的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
如果您需要任何进一步的信息,请问我。谢谢!
你需要使变量obx
和oby
局部变量,至少在update
函数中。每次你想移动障碍物时,你都需要调用 update
函数。
class Obstacle...
...
def update(self, obx, oby):
...
然后
if forward == True:
grassx += 2
obx += 2
Obstacle_instance.update(obx,0)
...
等等
抱歉,我无法深入解释为什么会这样,但我猜您的主要问题是 update
函数的位置。我的猜测是更新函数会更新它,然后全局变量会变回并且更新函数会相应地移动对象。
我正在尝试创建一个游戏,其中屏幕上的岩石会随着玩家移动而移动,因为玩家位于屏幕中心,而不是玩家移动,地形会移动。我遇到的问题是,每当按下一个键时,大约只有一半的岩石会向上移动 2 个像素,而当松开时,它们会恢复到原始状态。下面是控制地形移动的播放器更新函数的代码,其中obx
和oby
是移动时添加到地形上的坐标:
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
这就是石头class,它使用了之前函数中的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
如果您需要任何进一步的信息,请问我。谢谢!
你需要使变量obx
和oby
局部变量,至少在update
函数中。每次你想移动障碍物时,你都需要调用 update
函数。
class Obstacle...
...
def update(self, obx, oby):
...
然后
if forward == True:
grassx += 2
obx += 2
Obstacle_instance.update(obx,0)
...
等等
抱歉,我无法深入解释为什么会这样,但我猜您的主要问题是 update
函数的位置。我的猜测是更新函数会更新它,然后全局变量会变回并且更新函数会相应地移动对象。