如何使用数组在基于2D平铺的游戏中协调图形和逻辑位置?

前端之家收集整理的这篇文章主要介绍了如何使用数组在基于2D平铺的游戏中协调图形和逻辑位置?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在用像Bomberman(我的第一个游戏)编写一个基于Java平铺的Java游戏.

我使用2D数组来表示我跟踪墙壁,步行空间等的地图.到现在为止,我能够让玩家根据他按下的方向键(但不与背景/地图交互)平滑地交换精灵,它可以随机走动并走出屏幕).

当我想跟踪玩家在阵列中的位置时,我的问题出现了.从逻辑上讲,角色总是只属于一个瓷砖,但在图形上它可以在两个瓷砖之间.我该如何解决这个问题?

I already tried this:

currentTileArrayX = x / tileWidth;

currentTileArrayY = y / tileHeight;

Where x and y are the top-left coordinates of the sprite.
But everything became very buggy because the player’s sprites aren’t the same size as the tiles.

我有另一个选项可以解决上一个问题:当玩家按下一个方向键时,将该角色移动到下一个方块,就像动画一样.这不会让玩家停在两块瓷砖的中间……但是如果他用另一台按键打断它呢?如何在动画执行时停止用户的操作?我认为这是最简单的解决方案,但我不知道如何实现它.

我已经尝试在其他问题中找到解决方案,但我没有运气.我希望你能帮助我.

非常感谢.

最佳答案
Aaaaaaaaaaaaaaah!遇到“离散空间问题”:)你的逻辑映射是离散的,但你的UI运动是在连续的空间.我不是用户实际上可以“同时”在两个区块中 – 视觉上是,但从不’内部’.现在你正在获得玩家的位置,这可以是在瓷砖内的“任何地方”或2个瓷砖的“边界”,可以这么说……

你有两个解决这个问题的方法,IMO:

>使用简单的舍入:如果玩家位置是<瓷砖边界只是让他在前一个瓷砖上.如果下一个更大.现在边界的问题 - 你可以使用启发式,因为你不应该相信浮点比较的准确性(即,比较0不是一件好事).所以你可以尝试这样的东西if(currentPosition - boundary< = 0.000000001)然后假设它是下一个tile保持在同一个.
>好吧@Jay打败了我.所以第二个实际上是一个
定义移动速度并移动每步多步的角色
‘click’/’button press’ – 但你说你有钥匙的问题
压在“之间”.我猜你的代码是不是这样设计的
那应该不是问题:

    update()
        {
           calculate(); //update all datastructures/calculations
           draw(); //update the visual representation based on calculations
        }

update()是a.k.a,gameLoop.我认为这应该可以解决你的问题……

原文链接:https://www.f2er.com/java/437891.html

猜你在找的Java相关文章