我正在尝试制作类似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
会阻止他进入墙壁,但不幸的是他吃了一些底部和右侧墙壁。
任何想法如何将像素位置正确转换为数组索引?我想这很简单,但我真的无法弄明白:(
答案 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为常量。