最近我開始使用Libgdx開發,我遇到了一個我可以解決的問題。我想從Scene2d渲染一個Image對象到屏幕上,但是它沒有渲染任何東西。這只是顯示一個空白的屏幕。在Libgdx中渲染圖像
這裏是我的skin.json文件:
{
com.badlogic.gdx.scenes.scene2d.ui.Image: {
logo: { drawable: logo }
exit: { drawable: exit }
},
com.badlogic.gdx.graphics.Color: {
green: { a: 1, b: 0, g: 1, r: 0 },
white: { a: 1, b: 1, g: 1, r: 1 },
red: { a: 1, b: 0, g: 0, r: 1 },
black: { a: 1, b: 0, g: 0, r: 0 },
},
}
這裏是我的skin.atlas文件:
skin.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
logo
rotate: false
xy: 1, 1
size: 384, 93
orig: 384, 93
offset: 0, 0
index: -1
help
rotate: false
xy: 387, 30
size: 65, 64
orig: 65, 64
offset: 0, 0
index: -1
musicoff
rotate: false
xy: 454, 30
size: 65, 64
orig: 65, 64
offset: 0, 0
index: -1
musicon
rotate: false
xy: 521, 30
size: 65, 64
orig: 65, 64
offset: 0, 0
index: -1
exit
rotate: false
xy: 588, 30
size: 64, 64
orig: 64, 64
offset: 0, 0
index: -1
settings
rotate: false
xy: 654, 30
size: 64, 64
orig: 64, 64
offset: 0, 0
index: -1
ScreenWrapper類:
package screens;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.utils.viewport.StretchViewport;
import engine.Values;
import com.badlogic.gdx.scenes.scene2d.Stage;
public abstract class ScreenWrapper extends Stage implements Screen{
protected ScreenManager manager;
public ScreenWrapper(ScreenManager manager) {
super(new StretchViewport(Values.WIDTH, Values.HEIGHT, new OrthographicCamera()));
this.manager = manager;
}
// All the actors will be added here
public abstract void initiate();
public abstract void buildStage();
@Override
public void show() {
}
@Override
public void render(float delta) {
act();
draw();
}
@Override
public void resize(int width, int height) {
setViewport(new StretchViewport(Values.WIDTH, Values.HEIGHT));
}
@Override
public void pause() {
}
@Override
public void resume() {
}
@Override
public void hide() {
}
}
,這裏是我的主文件:
package screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import engine.Values;
public class MenuScreen extends ScreenWrapper{
private ScreenRenderer renderer;
public MenuScreen(ScreenManager manager) {
super(manager);
renderer = new ScreenRenderer();
}
@Override
public void initiate() {
manager.getLoader().load("skin.json", Skin.class);
}
@Override
public void buildStage() {
Skin skin = manager.getLoader().getAsset("skin.json", Skin.class);
Image logo = new Image(skin.getDrawable("logo"));
logo.setSize(Values.LOGO_WIDTH, Values.LOGO_HEIGHT);
logo.setOrigin(logo.getX() + Values.LOGO_WIDTH/2, logo.getY()
+ Values.LOGO_HEIGHT/2);
logo.setPosition(Values.WIDTH/2 - Values.LOGO_WIDTH/2,
Values.HEIGHT);
addActor(logo);
Gdx.app.log("X and Y", "X : " + logo.getX() + ", Y : "+logo.getY());
Gdx.app.log("Width and Height", "Width : " + logo.getWidth() + ", Height : " + Values.HEIGHT);
}
@Override
public void render(float delta) {
super.render(delta);
Gdx.gl.glClearColor(242/255f, 242/255f, 242/255f, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
}
我在做什麼錯?
編輯:好的我縮小了問題到我的JSON文件。它看起來像我沒有正確地宣佈徽標元素。我如何在JSON中聲明圖像元素?
編輯2:我試圖改變JSON文件到這一點:
{
com.badlogic.gdx.scenes.scene2d.ui.ImageButton$ImageButtonStyle: {
logo: { imageUp: logo, imageDown: logo }
},
com.badlogic.gdx.graphics.Color: {
green: { a: 1, b: 0, g: 1, r: 0 },
white: { a: 1, b: 1, g: 1, r: 1 },
red: { a: 1, b: 0, g: 0, r: 1 },
black: { a: 1, b: 0, g: 0, r: 0 },
},
}
但它仍然無法正常工作......
編輯3:我試圖加載剛剛的PNG文件將徽標作爲紋理對象標識到徽標actor中,但它仍不會繪製任何東西。我是這樣做的:pastebin.com/n6iB2ymD
解決方法:好吧,我終於明白了這一點。原來Values.Logo_Width和Values.Logo_Height是0,因此圖像的大小被設置爲0 ...
請顯示ScreenWrapper類。它是否已經在舞臺上調用'act'和'draw'? – Tenfour04
我添加了ScreenWrapper類 –