繁体   English   中英

移动演员Accuratley LibGDX Scene2d

[英]Move Actors accuratley LibGDX Scene2d

所以我有一个演员,是一个精灵,设置在screenviewport舞台上。 我想做的是能够触摸演员,然后触摸屏幕上的某个点,它将流畅地移动。 目前,当我触摸演员时,它似乎只是跳到随机点。 这是我的演员类中的一些代码,

public MyActor(){

    setBounds(sprite.getX(),sprite.getY(),
              sprite.getWidth(),sprite.getHeight());

    setTouchable(Touchable.enabled);

    addListener(new InputListener(){
        @Override
        public boolean touchDown(InputEvent event, float x, float y,
                                 int pointer, int button) {

            MoveByAction mba = new MoveByAction();
            mba.setAmount(x,y);
            MyActor.this.addAction(mba);
            return true;
        }


    });
}

@Override
protected void positionChanged() {
    sprite.setPosition(getX(),getY());
    super.positionChanged();
}

@Override
public void draw(Batch batch, float parentAlpha) {
   sprite.draw(batch);
}
@Override
public void act(float delta){
    super.act(delta);
}

这里没什么要问的。 首先,您的触摸只是触摸演员。 那将是演员的确切位置。 您需要在“场景”级别实现一些基本状态机,才能知道“初次点击,此角色已被选中”,然后它必须处于“选择此角色去向”状态,最后,当您选择一个位置时,将该XY发送给选定的演员进行移动。

现在,正如Tenfour04所述,您必须弄清楚触摸点在屏幕上的XY到游戏世界坐标的转换。 Tenfour04对在视口摄像机上使用投影方法来实现此目标做出了很好的评价。 完成此操作后,您可以将坐标发送给演员以执行前面提到的工作。

为了实现运动,我将使用Action框架,如下所示:actor.addAction(moveTo(x,y,0.4f,Interpolation.circle));

此页面显示了可用于Scene2d的所有不错的操作: https : //github.com/libgdx/libgdx/wiki/Scene2d#actions

希望这就是您所需要的。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM