LibGDX Scene2D:将动作应用于单独的类中的Actor

时间:2014-08-17 10:38:26

标签: java libgdx scene2d

当Actor在一个单独的类中时,我无法使用MoveToAction来处理Actor(menuBackground)。我在下面附上了相关的代码 - 它根本不会使Actor移动。

我已成功将其他操作应用于MainMenuScreen类的根阶段,以及MainMenuScreen类中的其他Actor(Button),但在单独的类中对Actors应用操作没有成功。

我已经尝试将MoveToAction放在MenuBackground类中的act(float delta)方法中,但这也没有用。也没有从MainMenuScreen类中将MoveToAction分配给menuBackground。

请注意,我正在调用super.act(delta);在我的MenuBackground类中。

我最终希望将MoveToAction的代码放在Actor MenuBackground类中,以使事情变得整洁。

干杯。

包含阶段的类:

public class MainMenuScreen implements Screen
{
     private Stage stage;
     public MainMenuScreen()
     {
         stage = new Stage(new FitViewport(800, 480));
         Gdx.input.setInputProcessor(stage);

         menuBackground = new MenuBackground();
         MoveToAction moveToAction = new MoveToAction();
         moveToAction.setPosition(242f, 276f);
         moveToAction.setDuration(10f);
         menuBackground.addAction(moveToAction);
         stage.addActor(menuBackground);

    @Override
    public void render(float delta) 
    {
        Gdx.gl.glClearColor(0, 0, 0, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);    
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }
...
}

演员类:

public class MenuBackground extends Actor
{
    private Texture menuBackgroundTexture;
    private float actorX;
    private float actorY;

    public MenuBackground()
    {
        menuBackgroundTexture = new Texture(Gdx.files.internal("data/menuTitleTexture.png")); 
        actorX = 242f;
        actorY = 350f;
        setBounds(actorX,actorY,316,128);   
    }

    @Override
    public void draw(Batch batch, float alpha)
    {
        batch.draw(menuBackgroundTexture,actorX,actorY);
    }

    @Override    
    public void act(float delta)
    {
        super.act(delta);    
    }
...
}

1 个答案:

答案 0 :(得分:1)

问题出在您的draw()方法中。

查看代码绘制纹理,它使用actorXactorY,它们实际上是不会更改其值的字段。

正确的方法是:

batch.draw(menuBackgroundTexture, getX(), getY(), getWidth(), getHeight());

所以,你应该使用演员自己的领域和吸气者,而不是管理你的。