2017-05-09 4 views
1

저는 LibGdx와 android studio를 처음 사용하고 있습니다. 나는 재생할 수있는 텍스처와 크레딧을위한 텍스처를 만들려고합니다. 둘 다 새 빈 화면/이벤트를 열어야합니다.클릭 수 텍스처

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

그러나 나는 또한 질감 배경을 만드는거야 때문에이 작업을 수행하는 방법에 대한 확신, 그래서 누군가가 나를 도와 나를 도와 수 있다면 정말 행복 할 것입니다.

답변

0

2D 스프라이트를 그리기위한 형상, 색상 및 텍스처 정보가있는 Texture 대신 Sprite을 사용하십시오.

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

MenuScreen

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

PlayScreen

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

배경이 크기가 조정되어 더 이상 화면에 맞지 않는 경우 매우 유용하지만 어떻게 수정합니까? –

+0

'Main_Screen.png'의 크기는 전체 화면을 커버하므로'480 * 800' (뷰포트 크기)의 차원에 있지 않으므로 모든 자원을 뷰포트 세계 크기의 컨텍스트로 사용하십시오. – Aryan

0

libGDX에 오신 것을 환영합니다!

질문을 올바르게 이해하면 게임에서 화면을 변경하는 방법을 파악하려고합니다. 고급 수준에서 다음 작업을 수행해야합니다.

  1. 화면에 단추 텍스처를 그립니다. (아마도 새로운 배경으로) 새로운 화면으로
  2. 스위치를 플레이어가 자신의 마우스 버튼을 리프트 때 (그리고 그것이 당신의 버튼 중 하나 이상 있다면 그들은 그것을 할 때) 이런 일이 발생하면
  3. 사용 Gdx.input 감지합니다.

내가 먼저 libGDX의 기초와 GameScreen 수업을 숙지하기 위해 "A Simple Game""Extending the Simple Game" 튜토리얼을 완료하는 것이 좋습니다 것입니다.

다음으로 Scene2D.UI (두 번째 자습서 하단에 링크가 있음)를 사용하여 주 메뉴에 StageTextButtons을 추가하십시오.

도움이된다면 도움이 될만한 libGDX wiki에 대한 유용한 정보가 많이 있습니다.