0

我正在尝试创建一个类似 pacman 的游戏。我有一个看起来像这样的数组:

大批:

1111111111111
1000000000001
1111110111111
1000000000001
1111111111111

1 = 墙壁,0 = 空白空间

我使用这个数组来绘制大小为 16x16 的图块。游戏角色为 32x32。

最初我表示字符在数组索引中的位置,[1,1] 等。

如果 array[character.new_y][charater.new_x] == 0 我会更新他的位置

然后我将这些数组坐标转换为像素 [y*16, x*16] 来绘制他。

他排得很好,不会撞墙,但我注意到,由于我将他每一个更新了 16 个像素,他的移动速度非常快。

我决定反过来做,以像素为单位存储游戏角色的位置,这样他每次移动可以使用少于 16 个像素。

我认为一个简单的 if 语句是这样的:

if array[(character.new_pixel_y)/16][(character.new_pixel_x)/16] == 0

会阻止他进入墙壁,但不幸的是他吃了一点底部和右侧的墙壁。

任何想法如何正确地将像素位置转换为数组索引?我想这很简单,但我真的想不通:(

4

1 回答 1

0

你似乎已经转置了你的二维数组。那是故意的吗?(是 array[x][y] 还是 array[y][x]?)

此外,图块大小的两倍的游戏角色也不适合给定的示例地图数组!

编辑:

如果您的角色在底部和右侧恰好吃掉半个瓷砖并且他/她没有与顶部和右侧重叠,那么您需要将您的角色偏移半个瓷砖。(x 和 y +/- 8 像素)

因此,当您“将这些数组坐标转换为像素时,[y*16, x*16] 以绘制他。” 您应该将其更改为: [(y*16)-8, (x*16)-8] 以在他为 32x32 时绘制他。

继续将他的位置存储为 [y*16, x*16],以遵循 16x 约定。

如果您先将所有内容保留为 16x16,这对您来说会更容易!

您还应该将 tile_size_x 和 tile_size_y 存储为常量。

于 2011-01-15T15:40:19.467 回答