Java libgdx和stage的摄像头问题

Java libgdx和stage的摄像头问题,java,android,libgdx,game-development,stage,Java,Android,Libgdx,Game Development,Stage,我不久前开始使用libgdx,有一次我开始使用带有舞台的摄像机,但我遇到了很多问题: 在我的舞台上,我增加了一个演员,他画了一个精灵,但我看不见精灵,即使我直接画。我只有在不用舞台的时候才能看到它 2) 如果我在没有舞台的情况下画一个精灵,触摸不会使它向侧面移动(它应该移动到我触摸的地方),尽管它能很好地移动圆形演员 3) camera.zoom/stage.getCamera().zoom epsees除了使触摸更糟糕之外没有任何效果,即使圆现在也不会移动到触摸 这是代码,这是一个screen

我不久前开始使用libgdx,有一次我开始使用带有舞台的摄像机,但我遇到了很多问题:

  • 在我的舞台上,我增加了一个演员,他画了一个精灵,但我看不见精灵,即使我直接画。我只有在不用舞台的时候才能看到它
  • 2) 如果我在没有舞台的情况下画一个精灵,触摸不会使它向侧面移动(它应该移动到我触摸的地方),尽管它能很好地移动圆形演员

    3) camera.zoom/stage.getCamera().zoom epsees除了使触摸更糟糕之外没有任何效果,即使圆现在也不会移动到触摸

    这是代码,这是一个screen类,我刚刚通过changeScreen运行了一个游戏类。我在安卓设备上测试它。如果有什么意义的话,TheWorld.jpeg是1024x576图像

    如果我的问题不清楚,请告诉我

    
    import com.badlogic.gdx.Gdx;
    //import com.badlogic.gdx.
    
    
    import com.badlogic.gdx.scenes.scene2d.*;
    import com.badlogic.gdx.graphics.glutils.*;
    import com.badlogic.gdx.graphics.g2d.*;
    import com.badlogic.gdx.*;
    import com.badlogic.gdx.graphics.*;
    import com.badlogic.gdx.utils.viewport.*;
    import com.badlogic.gdx.InputProcessor;
    
    import com.badlogic.gdx.math.Vector3;
    import android.graphics.drawable.shapes.*;
    
    
    class Shape extends Actor {
        public ShapeRenderer shapeRenderer;
        float x,y;
        
        public Shape(int xp, int yp){
            shapeRenderer = new ShapeRenderer();
            x = xp;
            y = yp;
        }
        @Override
        public void draw(Batch batch, float delta){
    
            shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
            shapeRenderer.setColor(0, 1, 0, 1);
            
            shapeRenderer.circle(this.x,
            this.y, 75);
            shapeRenderer.end();
        }
    }
    
    class Drawing extends Actor {
        private Sprite tex;
        private Shape shape;
        public Texture textureBackground;
    
        private Stage stage;
        public ShapeRenderer shapeRenderer;
        
        public Drawing(Sprite t, Shape s, Stage ss){
            tex = t;
            shape = s;
            stage = ss;
            shapeRenderer = new ShapeRenderer();
        }
        @Override
        public void draw(Batch batch, float delta) {
            tex.draw(stage.getBatch());
    
            shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
            shapeRenderer.setColor(1, 0, 0, 1);
    
            shapeRenderer.circle(shape.x,
                                 shape.y, 90);
            shapeRenderer.end();
            batch.draw(textureBackground, shape.x, shape.y, 50,50);
            //theWorld.draw(stage.getBatch());
            
        }
        
    }
    
    public class Screen01 implements Screen, InputProcessor
    {
    
            //Stage stage;
            Shape shape;
            MyGdxGame parent;
            
            public OrthographicCamera camera;
            private Stage stage;
            private Viewport viewport;
           
            private Texture textureBackground;
            private Sprite theWorld;
    
    
            //size I use to test
            private static final int WORLD_WIDTH = 400;
            private static final int WORLD_HEIGHT = 400;
        
            private Drawing tex;
            
            public Screen01(MyGdxGame game){
                camera = new OrthographicCamera(WORLD_WIDTH,WORLD_HEIGHT);
                camera.position.set(camera.viewportWidth / 2, camera.viewportHeight / 2, 0);
                
                viewport = new StretchViewport(WORLD_WIDTH, WORLD_HEIGHT, camera);
    
                stage = new Stage(viewport);
                stage.getViewport().apply();
                Gdx.input.setInputProcessor(this);
    
                textureBackground = new Texture("TheWorld.jpeg");
                theWorld = new Sprite(textureBackground);//new Texture(Gdx.files.internal("TheWorld.png")));
                theWorld.setPosition(0,0);
            
                
            
                /*stage = new Stage(
                    new StretchViewport(
                        Gdx.graphics.getWidth(),
                        Gdx.graphics.getHeight()
                    )
                );*/
                
                shape = new Shape(30,30);
                tex = new Drawing(theWorld,shape,stage);
                tex.textureBackground = textureBackground;
                parent = game;
                stage.addActor(shape);
                stage.addActor(tex);
                
            }
            
            @Override
            public void show() {
                 stage.addActor(shape);
                 stage.addActor(tex);
                 //Gdx.input.setInputProcessor(stage);
                // TODO Auto-generated method stub
            }
    
            @Override
            public void render(float delta) {
    
                Gdx.gl.glClearColor(.25f, .25f, .25f, 1);
                Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    
    
                stage.getBatch().setProjectionMatrix(stage.getCamera().combined);
                stage.getCamera().update();
    
                stage.getBatch().begin();
                
                //if I do it like this it will draw
                //stage.getBatch().draw(textureBackground, shape.x, shape.y, 10,10);
    
                stage.getBatch().end();
    
                stage.act(Gdx.graphics.getDeltaTime());
                stage.draw();
                
                //still doesn't draw
                tex.draw(stage.getBatch(),0);
                    // TODO Auto-generated method stub
                }
    
    
            @Override
            public void resize(int width, int height) {
                stage.getViewport().update(width, height);
                stage.getCamera().viewportWidth = WORLD_WIDTH;
                stage.getCamera().viewportHeight = WORLD_HEIGHT * height / width;
                stage.getCamera().position.set(stage.getCamera().viewportWidth / 2, stage.getCamera().viewportHeight / 2, 0);
                stage.getCamera().update();
            }
    
            @Override
            public void pause() {
               // camera.zoom -= 2;
                // TODO Auto-generated method stub
            }
            
            @Override
            public boolean touchDown(int screenX, int screenY, int pointer, int button) {
                Vector3 worldCoordinates = camera.unproject(
                    new Vector3(screenX,screenY,0),
                    viewport.getScreenX(),viewport.getScreenY(),
                    camera.viewportWidth,
                    camera.viewportHeight);
                //camera.zoom++;
                //worldCoordinates = viewport.unproject(worldCoordinates);
                
                //this works with normal zoom
                shape.x = (worldCoordinates.x);
                shape.y = (worldCoordinates.y);
                
                //this doesn't work
                theWorld.setPosition(worldCoordinates.x, worldCoordinates.y);
                
                //theWorld.setCenter(worldCoordinates.x-theWorld.getWidth()/2
                //, worldCoordinates.y-theWorld.getHeight()/2);
                //camera.zoom++;
                return false;
            }
    
            @Override
            public void resume() {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void hide() {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void dispose() {
                stage.dispose();
            }
            
            @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 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;
            }
    }```[TheWorld.jpeg][1]
    
    
      [1]: https://i.stack.imgur.com/e63AT.jpg