Я пытаюсь построить Android-игру с помощью LibGDX. Это мое первое приложение для Android, поэтому простите меня, если прошу прощения. Я пытаюсь нарисовать спрайт, но ничего не появляется. Я думал, что, возможно, спрайт выведен за пределы пространства камеры, но даже когда я снимаю камеру (показывая из области игры), я не вижу спрайт. Я потратил довольно много времени, пытаясь найти проблему, и я не смог. Это мой Playstate Класс:Sprite не отображается, когда нарисовано
public class PlayState extends State{
private Man man;
private Cannon cannon;
private Texture cannontop;
private Texture bg;
private SpriteBatch sb;
public PlayState(GameStateManager gsm) {
super(gsm);
cannon = new Cannon();
cannontop = new Texture("Cannon.png");
man = new Man(0, (Gdx.graphics.getHeight()/4));
bg = new Texture("background.png");
cam.setToOrtho(false, 2160, 3840);
}
@Override
protected void handleInput() {
// finish later
}
@Override
public void update(float dt) {
man.update(dt);
//cannon.update();
}
public void create(){
sb = new SpriteBatch();
}
@Override
public void render(SpriteBatch sb) {
sb.setProjectionMatrix(cam.combined);
sb.begin();
sb.draw(bg, cam.position.x - (cam.viewportWidth/2), 0);
sb.draw(man.getTexture(), man.getPosition().x, man.getPosition().y);
//sb.draw(cannon.getTexture(), cannon.getPositionx(), cannon.getPositiony());
cannon.getCannon().draw(sb);
sb.draw(cannontop, (bg.getWidth()/ 2) - (cannon.getTextureWidth()/2) - 23, (bg.getHeight()/2) + (bg.getHeight()/5));
//sb.draw(cannon.getTexture(), (bg.getWidth()/ 2) - (cannon.getTextureWidth()/2), (bg.getHeight()/2) + (bg.getHeight()/5) - (cannontop.getWidth()/2) + 8);
sb.end();
}
@Override
public void dispose() {
bg.dispose();
man.dispose();
cannon.dispose();
}
}
Спрайт, что я пытаюсь сделать это в классе пушки. Это мой класс пушек:
public class Cannon {
private Texture cannend;
private Texture bg;
private Texture cannonmain;
private SpriteBatch batch;
private Sprite cannon;
public Cannon(){
cannonmain = new Texture("Cannon.png");
bg = new Texture ("background.png");
cannend = new Texture("cannonend.png");
cannon = new Sprite(cannend, (bg.getWidth()/ 2) - (cannend.getWidth()/2), (bg.getHeight()/2) + (bg.getHeight()/5) - (cannonmain.getWidth()/2) + 8, (cannend.getWidth()), (cannend.getHeight()));
cannon.setPosition((bg.getWidth()/ 2) - (cannend.getWidth()/2), (bg.getHeight()/2) + (bg.getHeight()/5) - (cannonmain.getWidth()/2) + 8);
cannon.setRotation(70);
cannon.setCenter((bg.getWidth()/ 2) , (bg.getHeight()/2) + (bg.getHeight()/5) + 3*(cannend.getHeight()/4));
}
//public update(dt){
// stuffff
// }
public Sprite getCannon(){
return cannon;
}
public float getPositionx(){
return cannon.getX();
}
public float getPositiony(){
return cannon.getY();
}
public void dispose(){
cannonmain.dispose();
cannend.dispose();
bg.dispose();
}
public Texture getTexture(){
return cannend;
}
public float getTextureWidth(){
return cannend.getWidth();
}
}
Я извиняюсь, что имена спрайтов/текстур сбивают с толку. Пожалуйста, проигнорируйте комментарии, поскольку они есть для будущих/альтернативных вещей, которые я пробовал. Я хотел бы знать, что я могу сделать, чтобы заставить Sprite появиться. Кроме того, будет ли спрайт вращаться после того, как я его покажу? Любая помощь получает широкую оценку. Спасибо.
класс состояния:
public abstract class State {
protected OrthographicCamera cam;
protected Vector3 mouse;
protected GameStateManager gsm;
protected State(GameStateManager gsm) {
this.gsm = gsm;
cam = new OrthographicCamera();
mouse = new Vector3();
}
protected abstract void handleInput();
public abstract void update(float dt);
public abstract void render(SpriteBatch sb);
public abstract void dispose();
}
Если я удалю справку SpriteBatch, я получаю красную подчеркивание на верхняя строка 'playstate extends ...' и красная подчеркивание на @overrride. Если я удалю метод create(), я не получу никаких проблем. –
вы можете показать класс состояния, то –
обновлено основное сообщение –