因为害怕重新发明轮子,我想知道:
使用libGDX在自上而下的Tiled(2D)地图上实现基于平滑网格的游戏角色移动的最佳方法是什么?
只要按下箭头键(或者在角色的某个方向上发生触摸事件),角色就应该在瓷砖之间保持平滑移动,并且应该完成限制在按键/触摸释放上的网格位置.运动应独立于帧速率.
我会很高兴一些已经实现的示例可以研究并导致正确的libGDX API使用.
解决方法:
测试是否按下(或触摸屏幕)某个特定按钮,如果是,则在一个字段中设置正确的目标图块(玩家将要去的图块)并开始移动到那里,此运动仅在玩家处于下一个瓷砖.当发生这种情况时,再次检查输入以保持移动(即重复).
让我们假设,您的图块宽度/高度为1,并且您希望每秒移动1个图块.您的用户按右箭头键.然后你只需将目标设置到玩家右侧的方块即可.
if(targettile!=null){ yourobject.position.x += 1*delta; if(yourobject.position.x>=targettile.position.x){ yourobject.position.x = targettile.position.x; targettile = null; }}
此代码仅针对右移动进行了简化,您还需要将其用于其他方向.
如果玩家没有移动,请不要忘记再次轮询输入.
编辑:
输入密钥输入:
if (Gdx.input.isKeypressed(Keys.DPAD_RIGHT)){
用于触摸的inputPolling(cam是您的相机,touchPoint是用于存储未投影触摸坐标的Vector3,以及moverightBounds a(libgdx)Rectangle):
if (Gdx.input.istouched()){ cam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); //check if the touch is on the moveright area, for example: if(moveRightBounds.contains(touchPoint.x, touchPoint.y)){ // if its not moving already, set the right targettile here }}
并且noone已经说过了,你在渲染方法中得到delta作为参数,或者你可以在其他任何地方使用:
Gdx.graphics.getDeltatime();
参考文献:
> InputPolling
总结以上是内存溢出为你收集整理的java – libGDX:如何实现基于平铺/网格的游戏角色运动?全部内容,希望文章能够帮你解决java – libGDX:如何实现基于平铺/网格的游戏角色运动?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)