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是的,我忘了。对平铺地图也有同样的问题。舞台有自己的雪碧批次,如果你有两个活动的雪碧批次,它们会同时出现,这会造成麻烦。