2017-05-09 1 views
1

Ich bin neu in LibGdx und Android Studio. Ich versuche, anklickbare Texturen zu erstellen, eine für das Spiel und eine für Credits. Beide sollten einen neuen leeren Bildschirm/ein neues leeres Ereignis öffnen.Klickbare Texturen

public void create() { 

    batch = new SpriteBatch(); 
    img = new Texture("Main_Screen.png"); 
    music = Gdx.audio.newMusic(Gdx.files.internal("bgmusic.wav")); 
    music.play(); 
    music.setLooping(true); 
    credits = new Texture("credits.png"); 
    play = new Texture("play.png"); 
} 


@Override 
public void render() { 

    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 
    batch.draw(img, 0, 0); 
    batch.draw(play, 340, 1400); 
    batch.draw(credits, 340, 400); 
    batch.end(); 
} 

aber sie ist nicht sicher, wie dies zu tun, da ich auch bin den Hintergrund mit einer Textur zu schaffen, so würde ich mich sehr freuen, wenn mir jemand mich mit aushelfen helfen könnte.

Antwort

0

Verwenden Sie Sprite anstelle von Texture, das die Geometrie-, Farb- und Texturinformationen zum Zeichnen von 2D-Sprites enthält.

MyGdxGame

public class MyGdxGame extends Game { 

    public Screen menuScreen,creditsScreen,playScreen; 

    @Override 
    public void create() { 

     menuScreen=new MenuScreen(this); 
     creditsScreen=new CreditsScreen(); 
     playScreen=new PlayScreen(); 

     setScreen(menuScreen); 
    } 
} 

MENU-Seite

public class MenuScreen extends InputAdapter implements Screen { 

    SpriteBatch batch; 
    Texture background,play,credits; 

    Sprite backgoundSprite,playSprite,creditsSprite; 
    private ExtendViewport extendViewport; 

    OrthographicCamera cam; 
    private float w=480; 
    private float h=800; 
    private Vector3 vector3; 

    MyGdxGame game; 
    Music music; 

    public MenuScreen(MyGdxGame game){ 
     this.game=game; 
    } 

    @Override 
    public void show() { 

     batch = new SpriteBatch(); 
     cam = new OrthographicCamera(); 
     extendViewport=new ExtendViewport(w,h,cam); 

     vector3=new Vector3(); 

     background = new Texture("Main_Screen.png"); 
     play=new Texture("play.png"); 
     credits=new Texture("credits.png"); 

     backgoundSprite=new Sprite(background); 
     backgoundSprite.setSize(w,h);  // If resources are not in context of your viewport 
     backgoundSprite.setPosition(0,0); //Default Position 

     playSprite=new Sprite(play); 
     playSprite.setSize(100,100); 
     playSprite.setPosition(w/2-playSprite.getWidth()/2,h/2+100); 

     creditsSprite=new Sprite(credits); 
     creditsSprite.setSize(100,100); 
     creditsSprite.setPosition(w/2-creditsSprite.getWidth()/2,h/2-100); 

     Gdx.input.setInputProcessor(this); 

     music = Gdx.audio.newMusic(Gdx.files.internal("bgmusic.wav")); 
     music.play(); 
     music.setLooping(true); 
    } 

    @Override 
    public void render(float delta) { 

     Gdx.gl.glClearColor(1, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     batch.setProjectionMatrix(cam.combined); 
     batch.begin(); 
     backgoundSprite.draw(batch); 
     playSprite.draw(batch); 
     creditsSprite.draw(batch); 
     batch.end(); 
    } 

    @Override 
    public void resize(int width, int height) { 

     extendViewport.update(width,height); 
     cam.position.x = w /2; 
     cam.position.y = h/2; 
     cam.update(); 
    } 

    @Override 
    public boolean touchDown(int screenX, int screenY, int pointer, int button) { 
     vector3.set(screenX,screenY,0); 
     Vector3 position=cam.unproject(vector3); 
      if(playSprite.getBoundingRectangle().contains(position.x,position.y)) { 
      game.setScreen(game.playScreen); 
     } 
     if(creditsSprite.getBoundingRectangle().contains(position.x,position.y)){ 
      game.setScreen(game.creditsScreen); 
     } 

     return super.touchDown(screenX, screenY, pointer, button); 
    } 

    @Override 
    public void pause() { } 

    @Override 
    public void resume() { } 

    @Override 
    public void hide() { } 

    @Override 
    public void dispose() { 
     batch.dispose(); 
     background.dispose(); 
     play.dispose(); 
     credits.dispose(); 
    } 
} 

CreditsScreen

public class CreditsScreen implements Screen { 

    @Override 
    public void show() { 

    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    } 

    @Override 
    public void resize(int width, int height) { } 

    @Override 
    public void pause() { } 

    @Override 
    public void resume() { } 

    @Override 
    public void hide() { } 

    @Override 
    public void dispose() { } 
} 

Gabebildschirm

public class PlayScreen implements Screen { 

    @Override 
    public void show() { 

    } 

    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 1, 1, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    } 

    @Override 
    public void resize(int width, int height) { } 

    @Override 
    public void pause() { } 

    @Override 
    public void resume() { } 

    @Override 
    public void hide() { } 

    @Override 
    public void dispose() { } 
} 
+0

Das ist sehr hilfreich, aber der Hintergrund wurde angepasst und passt nicht mehr zum Bildschirm, wie würde ich das korrigieren? –

+0

Die Größe von 'Main_Screen.png' ist nicht in der Dimension' 480 * 800' (Ansichtsfenstergröße), da sie den gesamten Bildschirm abdeckt. Verwenden Sie daher alle Ressourcen im Kontext der Weltgröße des Darstellungsbereichs. – Aryan

0

Willkommen bei libGDX!

Wenn ich Ihre Frage richtig verstanden habe, versuchen Sie herauszufinden, wie Sie Bildschirme in Ihrem Spiel ändern. Auf einer hohen Ebene, das ist, was Sie tun müssten:

  1. Zeichnen Sie Ihre Schaltfläche Textur auf dem Bildschirm. Gdx.input
  2. Verwendung zu erkennen, wenn der Spieler die Maustaste hebt (und wenn es über eine der Tasten ist, wenn sie es tun)
  3. Umschalten auf den neuen Bildschirm (vermutlich mit einem neuen Hintergrund), wenn dies geschieht.

Ich würde empfehlen, dass Sie die "A Simple Game" und "Extending the Simple Game" Tutorials, um sich mit den Grundlagen der Libgdx vertraut zu machen erste vervollständigen und die Game und Screen Klassen.

Als nächstes versuchen Sie Scene2D.UI (es gibt Links am Ende des zweiten Tutorials), um eine Stage und TextButtons zu Ihrem Hauptmenü hinzuzufügen.

Hoffentlich hilft dir das beim Einstieg - es gibt viele hilfreiche Informationen zu diesem libGDX-Wiki, von denen ich denke, dass sie hilfreich sind.