当前位置: 首页 > 知识库问答 >
问题:

LibGDX场景2d:将操作应用于单独类中的参与者

董昕
2023-03-14

当演员在另一个班级时,我很难让MoveToAction在演员身上工作(menuBackground)。我在下面附上了相关代码——这根本不会让演员动起来。

我成功地将其他操作应用于MainMenuScreen类中的根阶段,以及MainMenuScreen类中的其他参与者(按钮),但没有成功地将操作应用于单独类中的参与者。

我尝试过将MoveToAction放在Menubackground类中的act(浮点增量)方法中,但这也不起作用。从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个答案

李昱
2023-03-14

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

查看代码绘制纹理,它使用actorXactorY这两个字段实际上不会改变它们的值。

正确的方法是:

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

所以,你应该使用演员自己的字段和getter,而不是管理你自己的字段和getter。

 类似资料:
  • 我对游戏编程相当陌生,刚刚开始考虑用libgdx构建我的第一个2d游戏。我已经搭建了一个舞台,演员们被吸引到屏幕上,通过动作、寻路等等。但是,当我创建几个阶段时,对于“Stage”类的用法,我有点困惑。最好的解决方案是只为所有扩展Stage的每个级别创建类,还是不需要,最好的解决方案是为每个级别创建类,并在其中包含一个Stage对象?希望这个问题不要太混乱,提前谢谢!

  • 所以,我正在开发一个flappy bird克隆。我设计了一个按钮,可以让鸟弹跳。我还想为这个按钮画一些东西(在这一点上完全不相关)。但不是每次按下按钮时。我已经试过了: 但这就是我现在想要的。我特别想在第一次按下按钮时画一些东西。我希望你能理解我的问题。谢谢你的帮助。

  • 我对ESB或Biztalk不太熟悉,如果您已经拥有Biztalk,我正试图从EAI的角度了解什么是最有意义的。据我所知,Biztalk是一个消息代理(集线器和分支),ESB模式是一个反代理,其中概念上的“总线”由各个分布式组件组成,这些组件以某种方式相互通信。消息代理本质上代表单点故障,与ESB不同,ESB中的一个组件故障不会导致整个“总线”停机。我的理解是,Biztalk是单片的,因为消息传递、

  • null 因此,正如您所看到的,这是一个极其异步的场景。如果我使用Cucumber来触发它,我可能可以创建一个步骤定义,在晚上10点之前将100美元的余额插入到帐户中,但使用Cucumber来触发在晚上11点运行批处理是不现实的,因为批处理作业通常是由操作员使用他们自己的调度工具(如Control-M)执行的。然后让cucumber等几个小时,听几个小时,然后验证应计利息,我不确定我是否会遇到超时

  • 本文档介绍 TiDB Data Migration (DM) 支持的主要应用场景及相关的使用建议。 非合库合表场景 将 TiDB 作为 MySQL/MariaDB 的从库 如需将 TiDB 作为上游 MySQL/MariaDB 的从库,即将上游实例中的所有数据先以全量形式导入到 TiDB,然后以增量形式实时复制后续变更到 TiDB,则简单按如下规则配置数据迁移任务即可: 指定 task-mode

  • 我正在开发一个Android游戏,使用Eclipse中的libGDX。我想加快我的场景(跑步机),每当一个球员得了10分。跑步机的初始速度等于0,每10分累加5。当角色掉出屏幕时,玩家就输掉了游戏。有人知道怎么做吗?