Pygame碰撞图

时间:2014-01-02 02:52:28

标签: pygame collision-detection collision maze

我知道,碰撞检测在本网站和其他许多网站上都有很多内容。我不完全理解它。我需要一些帮助来理解一些我可以使用类和碰撞来获得我想要的程序的方法。

我正在和Pygame一起玩RPG游戏。我希望我的播放器保持在屏幕的中心,让地图围绕玩家移动,而不是玩家在地图上移动。到目前为止,我有一个角色停留在屏幕中间,但有一个很棒的动画,可以完美地运行背景图像,根据玩家的方向和速度移动。唯一真正移动的是背景图像。

此时我想要添加的是一个复杂的碰撞盒迷宫,以匹配背景图像。我希望碰撞盒随背景图像移动。我需要一个位于屏幕中间的玩家的单个碰撞盒,我需要一个可以移动并与玩家碰撞的碰撞盒迷宫。

我想知道最好和最紧凑的方式是什么。我有一个想法,但我不知道如何将它付诸行动。我想知道我是否可以画出这样的迷宫:

Map = [
    "WWWWWWWWWW",
    "W        W",
    "W        W",
    "W        W",
    "W        W",
    "W        W",
    "WWWWWWWWWW"
    ]

是否有办法为“地图”中的每个“W”创建一个碰撞盒?我以前见过它,但我并不完全理解它,我希望能更深入地了解如何将它用于我的程序。

我的程序的一个小细节是播放器和每个块或空间是50 x 50像素。我想我会提到它,以防它帮助你。

2 个答案:

答案 0 :(得分:1)

这是错误的做法。想象一下,你有很多物体。你必须将它们全部移动,而不仅仅是玩家。

您应该创建一个Camera类,它将移动框架和播放器。相机应该只在屏幕上显示精灵,碰撞逻辑应该是分开的。

首先尝试制作一张小地图,玩家将移动并与墙壁发生碰撞。 只有这样你才能做到让相机始终以播放器为中心。

至于迷宫创作,这是一个好方法。看起来有点像这样:

for x,line in enumerate(Map):
    for y,c in enumerate(line):
        wallList.append(new Wall(x*WALL_HEIGHT,y*WALL_WIDTH))

答案 1 :(得分:0)

您可以绘制另一张图片,一张您在游戏中无法显示的图片,其中的线条或标记代表碰撞边界。如果您有可以执行图层的绘图程序,请打开世界地图图像并在单独的图层上绘制碰撞边界,然后将该图层保存到其自己的图像中。 在游戏循环中,根据碰撞图像测试世界地图中的精灵位置,以查看它们是否与任何碰撞边界碰撞。