Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t同时绘制一个九人组图像和舞台_Java_Libgdx_Stage - Fatal编程技术网

Java Can';t同时绘制一个九人组图像和舞台

Java Can';t同时绘制一个九人组图像和舞台,java,libgdx,stage,Java,Libgdx,Stage,每当我试图画一个九人组的图像和一个舞台,最后一件事就是被画出来。我曾尝试使用正交照相机,但没有成功。我所尝试的: batch.setProjectionMatrix(camera.combined); ninePatch.draw(batch, xPos, yPos, width, height); stage.act(delta); stage.draw(); camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graph

每当我试图画一个九人组的图像和一个舞台,最后一件事就是被画出来。我曾尝试使用正交照相机,但没有成功。我所尝试的:

batch.setProjectionMatrix(camera.combined);
ninePatch.draw(batch, xPos, yPos, width, height);
stage.act(delta);
stage.draw();

camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
stage.setCamera(camera)
编辑:代码

createquick类

public class CreateQuiz implements Screen{

    public CreateQuiz(Quiz quiz){
    this.quiz = quiz;
    }

    private Quiz quiz;
    private FallDownPanel fallDownPanel;
    private OrthographicCamera camera;

    @Override
    public void render(float delta) {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    quiz.beginBatch();
    fallDownPanel.render(quiz.getSpriteBatch(), delta);
    quiz.endBatch();
    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void show() {
    fallDownPanel = new FallDownPanel(FallDownPanel.START_LOWER_SIDE, 200, quiz.getTextureAtlas().createPatch("fallDownWindow"));
    Stage stage = new Stage(fallDownPanel.getWidth(), fallDownPanel.getHeight(), false);
    TextFieldStyle style = quiz.getGreenTextFieldStyle();
    style.font.scale(-0.30f);
    TextFieldQuiz test = new TextFieldQuiz("Hej åäö 123 !", style, 0, 2, 400, 16);
    test.setTextFieldListener(new TextFieldListener() {
        @Override
        public void keyTyped (TextField textField, char key) {
        if (key == '\n') {
            textField.getOnscreenKeyboard().show(false);
        }
        }
    });
    stage.addActor(test);
    Gdx.input.setInputProcessor(stage);
    fallDownPanel.setStage(stage);
    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    stage.setCamera(camera);
    fallDownPanel.setCamera(camera);
    }

    @Override
    public void hide() {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void dispose() {

    }

}
FallDownPanel.class

    public class FallDownPanel {

    //With repeat
    public FallDownPanel(int startSide, int size, NinePatch ninePatch){
    Tween.registerAccessor(FallDownPanel.class, new FallDownPanelTween());
    Tween.registerAccessor(Widget.class, new WidgetTween());
    tweenManager = new TweenManager();
    final int screenWidth = Gdx.graphics.getWidth();
    final int screenHeight = Gdx.graphics.getHeight();
    int target = 0;
    int tweenType = 0;

    if(startSide == START_LEFT_SIDE){
        setSize(size, screenHeight);
        xPos = -size;
        yPos = 0;
        target = 0;
        tweenType = FallDownPanelTween.POSITION_X;
    }

    else if(startSide == START_RIGHT_SIDE){
        setSize(size, screenHeight);
        xPos = screenWidth;
        yPos = 0;
        target = screenWidth - size;
        tweenType = FallDownPanelTween.POSITION_X;
    }

    else if(startSide == START_UPPER_SIDE){
        setSize(screenWidth, size);
        xPos = 0;
        yPos = screenHeight + size;
        target = screenHeight - size;
        tweenType = FallDownPanelTween.POSITION_Y;
    }

    else if(startSide == START_LOWER_SIDE){
        setSize(screenWidth, size);
        xPos = 0;
        yPos = -size;
        target = 0;
        tweenType = FallDownPanelTween.POSITION_Y;
    }

    Tween.to(this, tweenType, 1).target(target).start(tweenManager);
    this.tweenType = tweenType;
    this.startSide = startSide;

    this.ninePatch = ninePatch;
    }

    private TweenManager tweenManager;
    private NinePatch ninePatch;
    private Stage stage;
    private OrthographicCamera camera;

    private float xPos, yPos;
    private int width, height;
    private int tweenType;
    private int startSide;
    public static final int START_LEFT_SIDE = 0, START_RIGHT_SIDE = 1, START_UPPER_SIDE = 2, START_LOWER_SIDE = 3;

    public void render(SpriteBatch batch, float delta){
    tweenManager.update(delta);
    batch.setProjectionMatrix(camera.combined);
    ninePatch.draw(batch, xPos, yPos, width, height);
    stage.act(delta);
    stage.draw();
    }

    public void setX(float x){
    this.xPos = x;
    }

    public void setY(float y){
    this.yPos = y;
    }

    public float getX(){
    return xPos;
    }

    public float getY(){
    return yPos;
    }

    public float getWidth(){
    return width;
    }

    public float getHeight(){
    return height;
    }

    private void setSize(int w, int h){
    width = w;
    height = h;
    }

    public Stage getStage() {
    return stage;
    }

    public void setStage(Stage stage) {
    this.stage = stage;
    startWidgetTweens();
    }

    private void startWidgetTweens(){
    float size = getShortestSide();
    Array<Actor> actors = stage.getActors();
    for(int i = 0; i < actors.size; i++){
        Widget w = (Widget) actors.get(i);
        Tween.to(w, tweenType, 1).target(0).start(tweenManager);
    }
    }

    private float getShortestSide() {
    if(startSide == START_LEFT_SIDE){
        return width;
    }

    else if(startSide == START_RIGHT_SIDE){
        return width;
    }

    else if(startSide == START_UPPER_SIDE){
        return height;
    }

    else if(startSide == START_LOWER_SIDE){
        return height;
    }

    return -1;
    }

    public void setCamera(OrthographicCamera camera) {
    this.camera = camera;
    }

}
公共类下拉面板{
//重复
公共下拉面板(内部启动侧、内部大小、九件套九件套){
Tween.registerAccessor(FallDownPanel.class,新的FallDownPanelTween());
registerAccessor(Widget.class,new widgetWeen());
tweenManager=新tweenManager();
final int screenWidth=Gdx.graphics.getWidth();
final int screenHeight=Gdx.graphics.getHeight();
int目标=0;
int-tweenType=0;
如果(开始侧==开始侧/左侧){
设置尺寸(尺寸、屏幕高度);
xPos=-大小;
yPos=0;
目标=0;
tweenType=下降面板Tween.POSITION_X;
}
else if(startSide==开始\右侧){
设置尺寸(尺寸、屏幕高度);
xPos=屏幕宽度;
yPos=0;
目标=屏幕宽度-大小;
tweenType=下降面板Tween.POSITION_X;
}
否则如果(起始侧==起始侧上部){
设置大小(屏幕宽度、大小);
xPos=0;
yPos=屏幕高度+大小;
目标=屏幕高度-大小;
tweenType=下降面板Tween.POSITION_Y;
}
否则如果(开始侧==开始侧{
设置大小(屏幕宽度、大小);
xPos=0;
yPos=-尺寸;
目标=0;
tweenType=下降面板Tween.POSITION_Y;
}
Tween.to(this,tweenType,1).target(target).start(tweenManager);
this.tweenType=tweenType;
this.startSide=startSide;
this.ninePatch=ninePatch;
}
私人二人经理二人经理;
私人九包九包;
私人舞台;
私人正交摄影机;
私人浮动XPO、YPO;
私人int宽度、高度;
私有int-tweenType;
私人int startSide;
公共静态最终整数起始左起始侧=0,起始右起始侧=1,起始上起始侧=2,起始下起始侧=3;
公共void渲染(SpriteBatch批处理、浮点增量){
tweenManager.update(三角洲);
batch.setProjectionMatrix(camera.combined);
ninePatch.draw(批次、XPO、YPO、宽度、高度);
舞台表演(三角洲);
stage.draw();
}
公共无效集合x(浮动x){
this.xPos=x;
}
公共无效setY(浮动y){
this.yPos=y;
}
公共浮点getX(){
返回XPO;
}
公共浮球{
返回YPO;
}
公共浮点getWidth(){
返回宽度;
}
公众浮标高度(){
返回高度;
}
私有无效设置大小(整数w,整数h){
宽度=w;
高度=h;
}
公共舞台getStage(){
返回阶段;
}
公共空间设置阶段(阶段){
这个阶段=阶段;
StarTwidgetWeens();
}
私有void startWidgetTweens(){
浮动大小=getShortestSide();
数组actors=stage.getActors();
for(int i=0;i
始终确保一次只有一个活动的
渲染器。
渲染器是:

  • 批处理
  • SpriteBatch
  • shaperender
  • box2debugrenderer
    如果我没有错
  • ModelBatch
    用于3D
我希望我没有忘记一个。
在调用新的
begin()
之前,请确保始终调用活动的
end()

还请记住,
Stage
有自己的
SpriteBatch
,如果调用
Stage.draw()
,它将为此
SpriteBatch
调用
begin()
。因此,请确保在
stage.draw()之前
end()
激活的
渲染器
如果需要
shaperender
或任何其他渲染器来绘制
Actor
(可能是调试的原因),则必须结束
阶段
SpriteBatch
,这是通过
draw()
方法获得的。确保
begin()

希望这一点足够清楚。

将九人组作为演员添加到舞台上,这样就可以了。如果渲染内容,正确的顺序很重要。有可能你用九人台/舞台透支了一切,这就是为什么你看不到任何其他东西。请添加整个渲染方法我已经编辑了帖子@BennX你能让后台透明吗?我解决了,我停止了当前的批处理,因为后台有自己的批处理,或者类似的东西。然后我只调用stage.act()和stage.draw();谢谢你@BennxOh是的,我忘了。对平铺地图也有同样的问题。舞台有自己的雪碧批次,如果你有两个活动的雪碧批次,它们会同时出现,这会造成麻烦。