使用平铺的python3中与pygame的冲突问题



我正在使用python3中的pygame开发一个litle游戏。我使用平铺的地图和pyscroll的相机,我不知道如何解决这个问题:我使用平铺中的对象层和少量代码进行了检测碰撞。检测工作得很好,但当谈到帘布层";你不能走这条路——那里有一堵墙;我卡住了。。。通常,我首先创建一个数组,将所有将与for循环碰撞的墙放在其中,然后给我的ply对象x和y坐标:我用它们让他在地图中的某个位置产卵,但我也会在变量中的每一帧更新这个坐标。最后,我用copy((函数将这个坐标存储在另一个变量中,这样我就有了两个变量:position和old_position。

然后,我检查每一帧是否与墙发生碰撞,以及它们是否发生碰撞:position=old_position|这样帘布层就永远不会穿过墙。这一次不起作用,我真的不知道为什么——有什么建议吗?

plr = Player(320, 320)
map_g.add(plr)
walls = []
for obj in tmx_data.objects:
if obj.type == "collision":
walls.append(pygame.Rect(obj.x, obj.y, obj.width, obj.height))

环路

plr.save_pos()
map_g.center(plr.rect.center)
map_g.update(0.075)
for sprite in map_g.sprites():
if sprite.feet.collidelist(walls) > -1:
print("collision")
sprite.collision_repos()
map_g.draw(win)

分层

def __init__(self, pos_x, pos_y):
super().__init__()
...    
self.position = [pos_x, pos_y]
self.old_position = self.position.copy()
...
def save_pos(self):
self.old_position = self.position.copy()
def collision_repos(self):
self.position = self.old_position
self.rect.topleft = self.position
self.feet.midbottom = self.rect.midbottom
def update(self, speed):
self.rect.topleft = self.position
self.feet.midbottom = self.rect.midbottom
...

所以实际上我在5小时后解决了这个问题。。。这实际上是一个愚蠢的问题,所以一切都在工作,只是save_pos((函数调用得太快,只工作了一次,之后函数就坏了。这里所要做的就是让解释器有一些m/s,所以稍后在代码中调用函数。。。

最新更新