我开始在libgdx开发游戏,我想知道以下情况的最佳做法是什么。我正在尝试做两件事:将菜单(精灵)移动到位,然后将相机平移到播放器精灵。我完成这些事情的想法是在render()函数中有一个'action_stack'ArrayList。 ArrayList将包含“Action”实例。每个Action
实例都有一个step()
函数,该函数将被覆盖。在render()
函数中,我将迭代action_stack
,并触发每个元素'step()
函数。因此,为了完成将菜单移动到位,我将创建类:
public class MenuAnim1 implements Action {
private int targetX;
private int targetY;
private Sprite menu;
public MenuAnim1() {
//set initial sprite and position
}
public Step() (
//move this.menu towards targetX and targetY
//draw the sprite
//if not at target position, do nothing
//if at target position, remove this object from action_stack
}
}
...并将实例放入action_stack
:
MenuAnim1 menuAnim1 = new MenuAnim1();
action_stack.add(menuAnim1);
很抱歉,如果我的Java不好,我对它并不是很熟悉。无论如何,我的问题是:这是不是很好的做法?人们通常做什么?是否有更好的方法来完成我上面描述的内容?
答案 0 :(得分:5)
我从未使用Action,但您的想法很好。如果您希望它们与时间相关(因此fps独立),请务必使用自上一帧到目前的时间,也称为 delta 或 deltaTime 。你可以这样得到它:
Gdx.graphics.getDeltaTime();
所以,为了让你的动作移动精灵,例如,向右移动,这就可以了:
speed = 10; //It will move 10 units per second.
delta = Gdx.graphics.getDeltaTime();
menu.translateX(speed*delta);