2017-01-11 9 views
1

scene2d 위로 아래로 위치 (이것은 이미지 버튼을 사용하여 쉽습니다).정확한 위치는 내가, 내 libGDX 응용 프로그램에서 다음과 같은 무언가를 오프 설정 프레스 수있는 피아노 키 레이아웃 할

내가 고심하고있는 것은 모든 버튼을 피아노 키보드와 비슷한 것으로 레이아웃하는 방법입니다. 흰색 피아노 건반 이미지는 직사각형이지만 검정 피아노 건반을 그 위에 놓아야합니다. 아래 그림은 내 하얀 피아노 키 이미지가 어떻게 보이는지를 보여줍니다. 검은 색 메모를 쓰려는 위쪽 모서리에 사각 공간이 있습니다. 테이블 간격으로 나를 떠날 것이다 나란히 모든 것을 레이아웃으로 Table가 작동하지 않습니다 사용

enter image description here

. Stack을 사용할 수있는 것을 보았지만 모든 어린이를 마지막에 바로 놓기 때문에 도움이되지 않습니다.

Skin skin; 
Stage stage; 
SpriteBatch batch; 
private TextButton button1; 
private TextButton button2; 

@Override 
public void create() { 
    batch = new SpriteBatch(); 
    stage = new Stage(); 
    Gdx.input.setInputProcessor(stage); 

    createSkin(); 

    Table table = new Table(); 
    table.setFillParent(true); 
    stage.addActor(table); 

    // Create a button with the "default" TextButtonStyle. A 3rd parameter can be used to specify a name other than "default". 
    button1 = new TextButton("First note", skin); 
    button1.getLabel().setFontScale(5); 

    button2 = new TextButton("Second note", skin); 
    button2.getLabel().setFontScale(5); 

    table.add(button1).width(500).height(500); 
    table.add(button2).width(500).height(200); 
} 

@Override 
public void render() { 
    super.render(); 
    Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
} 

@Override 
public void resize (int width, int height) { 
    stage.getViewport().update(width, height, true); 
} 

@Override 
public void dispose() { 
    stage.dispose(); 
    skin.dispose(); 
} 

private void createSkin() { 
    skin = new Skin(); 

    Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888); 
    pixmap.setColor(Color.WHITE); 
    pixmap.fill(); 
    skin.add("white", new Texture(pixmap)); 

    skin.add("default", new BitmapFont()); 

    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle(); 
    textButtonStyle.up = skin.newDrawable("white", Color.DARK_GRAY); 
    textButtonStyle.down = skin.newDrawable("white", Color.BLUE); 
    textButtonStyle.checked = skin.newDrawable("white", Color.DARK_GRAY); 
    textButtonStyle.over = skin.newDrawable("white", Color.DARK_GRAY); 
    textButtonStyle.font = skin.getFont("default"); 
    skin.add("default", textButtonStyle); 
} 

이 렌더링 : 도움이된다면

, 내 코드는 다음과 같은 것입니다 나는 테이블을 사용하여 말할 수까지 일을 중복 할 수있는 방법이 없습니다 enter image description here

,하지만 난 할 수 그것을하는 다른 방법을 찾지 못한다. scene2d를 사용하여이 작업을 수행 할 수 있습니까?

답변

0

가장 간단한 해결책은 동일한 뷰포트 (스테이지는 크기 조정의 경우 동일한 방식으로 동작해야 함)로 두 번째 스테이지을 만들고 현재 스테이지 위에 배치하는 것입니다. 같은 테이블을 만들 필요가 있지만 검정색 노트 만 채워야합니다 (현재 스테이지에는 물론 흰색 테이블 만 포함됩니다).

두 단계에서 이벤트를 얻으려면 InputMultiplexer을 사용해야합니다. 사용 방법은 read here입니다.

0

키를 나타내는 모든 버튼을 스테이지에 배치하지 않고 스테이지에 직접 추가합니다. 수동으로 위치를 설정하십시오. 피아노 건반에는 명확한 패턴이 있으므로 수동으로 조작하기 쉽습니다. 흰색 키를 추가 한 후 검정색 키를 추가하십시오. 검정색 키가 입력을 받기 위해 우선 순위가 지정되므로 흰색 키가 사각형이 아닌 것에 대해 걱정할 필요가 없습니다.