2016-08-21 13 views
1

LibGDXを使用してアンドロイドゲームを作成しようとしています。これは私の最初のアンドロイドアプリなので、私が求めていることが簡単なら私を許してください。私はスプライトを描こうとしていますが、何も表示されないようです。スプライトがカメラ空間の外に描かれているかもしれないと思っていましたが、カメラを戻しても(ゲームエリアを表示しても)スプライトが見えません。私は問題を見つけるためにかなりの時間を費やしてきましたが、私はできませんでした。描画時にスプライトが表示されない

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(); 
    } 
} 

私が描くしようとしているスプライトが大砲クラスである:これは私のPlaystateクラスです。これは私の砲のクラスです:

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(); 
    } 
} 

私は謝罪スプライト/テクスチャの名前は混乱しています。私が試した未来/代替のためにそこにあるので、コメントを無視してください。スプライトが現れるように私ができることを知りたい。また、スプライトは表示された後に回転しますか?どんな助けも大いに評価されます。おかげさまで

状態クラス:

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(); 


} 

答えて

0

方法 はただのSpriteBatch.beginを複製するため)(スプライトを描画することはできませんlibgdxかもしれませ

@Override 
public void render() 
+0

SpriteBatch sbを削除すると、 top 'playstate extends ...'行と@overrrideの赤い下線です。 create()メソッドを削除しても問題はありません。 –

+0

あなたは状態クラスを表示することができます –

+0

メインポスト –

0

ように使用レンダリングからSpriteBatch SBパラメータを削除。
とSpriteBatch.end()を複製する。 コールのスタック

1

spritebatch.draw(sprite)ではなく、sprite.draw(spritebatch)でスプライトを描画する必要があります。

また、Stateクラスはどのような用途ですか?プレイステーションはスクリーンとされていますか?次に、あなたのクラスにScreenインタフェースを実装し、レンダリング、ディスポーザルなどのメソッドを使用します。

+0

cannon.getCannon()はスプライトを返します。 sbはSpriteBatchです。したがって、sprite.draw(spritebatch)と同じです。 –

+0

2つのスプライトバッチを使用しています.1つはレンダリングメソッドで、もう1つはクラス自体で、レンダリングメソッドでスプライトバッチを削除します。また、今実際に行っているのではなく、Screenの実装について考える必要があります。 –

関連する問題