【问题标题】:libgdx actor won't change positionlibgdx 演员不会改变位置
【发布时间】:2017-02-12 13:37:18
【问题描述】:

如果一个actor被它自己的actor.act()方法移动,它会完美地更新位置。但是,如果我使用moveBy() 方法或moveBy 操作将包含该演员的group 移动演员,那么演员会移动,但它的getX() 和getY() 值与之前保持不变移动。当演员没有被 act() 方法移动,而是通过外部方法移动时,有没有办法让演员更新其位置?

sn-p 看起来像这样:

//Bounds are set in the MyActor class, which extends Actor
MyActor myActor= new MyActor();
Group group = new Group();
group.addActor(myActor)

//stage already created
stage.addActor(group);

//Doesn't update X and Y, when calling myActor.getX(), myActor.getY()
group.moveBy(x,y);

【问题讨论】:

    标签: java libgdx actor scene2d


    【解决方案1】:

    getX()getY() 返回actor在局部坐标中的位置。您可以将此位置转换为舞台的坐标。

    具有localToStageCoordinates(Vector2 localCoords) 方法的演员,该方法将演员坐标中的指定点转换为舞台坐标

    为本地位置创建一个类级变量。

    Vector2 localPos= new Vector2();
    

    在那个localPos中设置值和

    localPos.set(myActor.getX(),myActor.getY());
    Vector2 stagedPos=group.localToStageCoordinates(localPos); 
    

    stagedPos.xstagedPos.y 是您的要求。

    测试

    public class TestGame extends Game implements InputProcessor{
    
        Stage stage;
        Image image;
        Group group;
        Vector2 vector2=new Vector2();
    
        @Override
        public void create() {
    
            stage=new Stage();
            group=new Group();
    
            Gdx.input.setInputProcessor(this);
    
            image=new Image(new Texture("image/base.png"));
            image.setPosition(100,100);
    
            group.addActor(image);
            stage.addActor(group);
    
            System.out.println("Initial Position of Actor : "+image.getX()+" And "+image.getY());
        }
    
        @Override
        public void render() {
            super.render();
    
            Gdx.gl.glClearColor(1,1,1,1);
            gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    
            stage.draw();
            stage.act();
        }
    
        @Override
        public void resize(int width, int height) {
            super.resize(width, height);
            stage.getViewport().update(width,height);
        }
    
        @Override
        public boolean keyDown(int keycode) {
            return false;
        }
    
        @Override
        public boolean keyUp(int keycode) {
            return false;
        }
    
        @Override
        public boolean keyTyped(char character) {
            return false;
        }
    
        @Override
        public boolean touchDown(int screenX, int screenY, int pointer, int button) {
    
            System.out.println("Actor Position Before moveBy on Group is : "+image.getX()+" And "+image.getY());
    
            group.moveBy(50,50);
    
            System.out.println("After moveBy applied on Group, Actor Position is : "+image.getX()+"And"+image.getY());
            vector2.set(image.getX(),image.getY());
            Vector2 stageCord=group.localToStageCoordinates(vector2);
            System.out.println("Position with Stage Cord. is : "+stageCord.x+" And "+stageCord.y);
    
            return false;
        }
    
        @Override
        public boolean touchUp(int screenX, int screenY, int pointer, int button) {
            return false;
        }
    
        @Override
        public boolean touchDragged(int screenX, int screenY, int pointer) {
            return false;
        }
    
        @Override
        public boolean mouseMoved(int screenX, int screenY) {
            return false;
        }
    
        @Override
        public boolean scrolled(int amount) {
            return false;
        }
    }
    

    输出是:

    Actor 的初始位置:100.0 和 100.0
    组上 moveBy 之前的演员位置是:100.0 和 100.0
    在 Group 上应用 moveBy 后,Actor Position 为:100.0 和 100.0
    用舞台线定位。是:150.0 和 150.0

    【讨论】:

    • 我很确定group.localToStageCoordinates(new Vector2(actor.getX(),actor.getY())); 不会返回正确的值,但actor.localToStageCoordinates(new Vector2(0,0)); 会,虽然我可能错了,但我已经为此奋斗了几次,以防万一这对您没有帮助我的例子
    • @centenond 我测试过,它工作正常,正如我解释的那样,请检查更新的答案
    • 看那个,猜我一直都做错了
    • @centenond 用演员的坐标调用localToStageCoordinates 与用(0,0) 调用演员是一样的。看看源代码。向量(0,0)会被转换成actor在组坐标系中的坐标并向上传播。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多