ゲームのテクスチャを異なる画面サイズに調整したいので、viewport
にExtendViewport
を追加しようとしましたが、状態を変更しようとするたびに背景が読み込まれます。初めてすべてが正常に動作しますが、私は別の状態を設定しようとするたびアイブ氏は、空白の画面を得た(私は、コードのエラーを排除するために同じ状態のインスタンスを試してください)Android libGDX背景なし状態が変更された後のスプライト
STATE
public abstract class State {
protected OrthographicCamera camera;
protected GameStateManager gsm;
protected Viewport viewport;
public State(GameStateManager gsm) {
this.gsm = gsm;
camera = new OrthographicCamera();
viewport = new ExtendViewport(GAME_SIZE_WIDTH * aspectRatio, GAME_SIZE_HEIGHT, camera);
viewport.apply();
camera.position.set(GAME_SIZE_WIDTH/2, GAME_SIZE_HEIGHT/2, 0);
}
public abstract void handleInput();
public abstract void update(float dt);
public abstract void render (SpriteBatch sb);
public abstract void dispose();
public abstract void resize(int width, int height) ;
}
メニュー国家
public class MenuState extends State{
private Sprite background;
private Sprite playButton;
public MenuState(GameStateManager gsm) {
super(gsm);
background =new Sprite(new Texture(Gdx.files.internal("back.jpg")));
background.setSize(GAME_SIZE_WIDTH,GAME_SIZE_HEIGHT);
background.setPosition(0,0);
playButton=new Sprite(new Texture("play.png"));
playButton.setSize(40,30);
playButton.setPosition(GAME_SIZE_WIDTH/2-playButton.getWidth()/2,GAME_SIZE_HEIGHT/2-playButton.getHeight()/2);
}
@Override
public void render(SpriteBatch sb) {
sb.setProjectionMatrix(camera.combined);
sb.begin();
background.draw(sb);
playButton.draw(sb);
sb.end();
}
@Override
public void dispose() {
playButton.getTexture().dispose();
background.getTexture().dispose();
}
@Override
public void resize(int width, int height) {
viewport.update(width,height);
camera.position.set(GAME_SIZE_WIDTH/2, GAME_SIZE_HEIGHT/2, 0);
}
@Override
public void handleInput() {
if(Gdx.input.justTouched()) {
gsm.set(new MenuState(gsm));}
}
@Override
public void update(float dt) {
handleInput();
}
}
GameStateManager
public class GameStateManager {
private Stack<State> states;
public GameStateManager() {
states=new Stack<State>();
}
public void push(State state){
states.push(state);
}
public void pop(){
states.pop().dispose();
}
public void set(State state){
states.pop().dispose();
states.push(state);
}
public void update(float dt){
states.peek().update(dt);
}
public void render(SpriteBatch sb){
states.peek().render(sb);
}
public void resize(int width, int height){
states.peek().resize(width,height);
}}
どのように状態を変更するか(ある状態から別の状態への移行) – Aryan
GameStateManagerインスタンスを使用しています。新しい状態を設定したいときはいつでもスタックからポップしてそれを破棄し、新しい状態を作成してスタックにプッシュします。このアプローチは、ビューポートを使用せずスプライトの代わりにテクスチャを使用したときにうまく動作しますが、ビューポートを使用することに決めたので、異なるサイズのアプリケーションを扱うようにアプリケーションをアップグレードしたいと考えています。私はあなたがそれを見たいと思うなら、私の論理を質問に入れます。 – Expiredmind
**バックグラウンドがロードされていないことを意味します**新しいStateオブジェクトを作成し、あなたの州のスタックにプッシュする必要があるたびに**。 – Aryan