一个非常简单的基于平铺的游戏的问题

时间:2011-01-15 15:19:23

标签: tiles tile pacman

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

数组:

1111111111111
1000000000001
1111110111111
1000000000001
1111111111111

1 =墙,0 =空格

我使用此数组绘制尺寸为16x16的图块。 游戏角色是32x32。

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

如果数组[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

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

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

1 个答案:

答案 0 :(得分:0)

您似乎已转换了您的2D数组。这是故意的吗? (是数组[x] [y]还是数组[y] [x]?)

另外,瓦片大小加倍的游戏角色不适合给定的示例地图数组!

编辑:

如果你的角色正好吃了半个瓷砖的底部和右边,他/她不会重叠顶部和顶部。是的,然后你需要将你的角色偏移一半。 (x和x都是+/- 8像素)

所以当你,“将这些数组坐标转换为像素,[y * 16,x * 16]来绘制他。” 你应该改为: [(y * 16)-8,(x * 16)-8]在32x32时画出他。

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

如果你把所有东西都放在16x16之前,这对你来说会更容易!

你还应该存储tile_size_x& tile_size_y为常量。