Недавно я начал работать с Libgdx, и я столкнулся с проблемой, которую я могу решить. Я хочу сделать объект Image из Scene2d на экран, но он ничего не отображает. Это просто показывает пустой экран.Рендеринг изображения в 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);
}
}
Что я делаю неправильно?
EDIT: Хорошо, я сузил проблему в своем файле JSON. Похоже, я не декларирую элемент логотипа правильно. Как объявить элементы изображения в JSON?
EDIT 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 },
},
}
Но она по-прежнему не работает ...
EDIT 3: Я пытался загрузить только .png файл логотип в логотип, как объект Texture, но он все равно ничего не рисует. Я сделал это вот так: pastebin.com/n6iB2ymD
РЕШЕНИЕ: Хорошо, я наконец понял это. Получается Values.Logo_Width и Values.Logo_Height были 0, поэтому размер изображения был установлен равным 0 ...
Просьба показать класс ScreenWrapper. Он уже называет «act» и «draw» на сцене? – Tenfour04
Я добавил класс ScreenWrapper –