2013-12-11 1 views
1

오 잘. .. 그것을 이해하려고 노력하고있는 거의 하루 후에, 그것을 발견 할 수 없었다. .. 여기 그것이있다. 나는 scene2d를 사용하고있다.표를 보이지 않고있다 Image

내 문제는 위젯을 확장하는 Image 클래스를 확장하고 크기가 128x128 인 텍스처를 가진 "타일"이라는 클래스가 있지만 테이블에 추가하려고 할 때 (위젯 그룹), 내 타일 사라집니다.

편집 : 난 그냥 테이블에 크기 확인을 만들어 테이블 내부에 크기가 128x128 인 타일을 추가 한 후, 테이블이 0x0의 크기 자체를 보여주는 것을 확인 ... 뭔가 잘못 여기 있나?

난 이미 시도 : addActor() 대신 추가(), 그리고 타일을 사용하여

  • 완벽하게 보여 주지만, 테이블에게 내가 필요로하는 방법을 사용할 수 없습니다 ...
  • 다른 배우를 추가 add()를 사용하면 표시됩니다.
  • 다른 액터의 중간에 타일을 추가하면 타일이 전혀 나타나지 않으며 테이블에 null 객체를 추가 할 때 빈 공간으로 표시되지 않습니다.
  • 타일의 기본 크기에 문제가 있는지 확인합니다. 괜찮으며 128x128입니다.

OBS : 나는 (텍스처 (texture)의 적절한 전환> TextureRegion-을> TextureRegionDrawable을) 내 타일 생성자에서 setDrawable()를 사용하려고하면 내가 이상하게 관찰 한 가지입니다, 내가 그것을 그린 할 수 없음을 어떤 방법 으로든, 나는 단지 생성자에서 super (Texture)를 호출하여 텍스처를 만들 수 있으며 Image (Drawable) 생성자를 관찰하면 처음으로 드로어 블을 설정할 때 다른 작업을 수행한다는 것을 알 수 있습니다. 첫 번째 시간은 ... ... 슈퍼 (텍스처)를 사용하는 경우에도 테이블에 셀을 추가 할 때 표시되지 않습니다 ... 아마도 여기에 문제가 있습니까? 내가 모르는 ...

내 질문

은 다음과 같습니다

  • 문제가 무엇입니까?
  • 문제를 이해하는 것으로 충분하지 않을 경우 어떻게해야합니까?

Edit2가 :

public class Tile extends Image{ 

// Tiles 
private Texture unselected; 
private Texture selected; 

// InputListener for detecting mouse over 
private class MouseOver extends InputListener{ 

    public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) { 
     setDrawable(new TextureRegionDrawable(new TextureRegion(selected))); 
    } 
} 
private class MouseOut extends InputListener{ 

    public void exit(InputEvent event, float x, float y, int pointer, Actor fromActor) { 
     setDrawable(new TextureRegionDrawable(new TextureRegion(unselected))); 
    } 
} 

public Tile(){ 
    super(TextureFactory.unselectedTile()); 
    unselected = TextureFactory.unselectedTile(); 
    selected = TextureFactory.selectedTile(); 
    this.addListener(new MouseOver()); 
    this.addListener(new MouseOut()); 
} 
} 

타일 위에 내가 마우스 그것의 질감을 변경하는 청취자를 가지고 : 요청으로, 여기에 관련 코드입니다. 테스트를 위해 리스너를 제거했는데 오류가 여전히 발생 했으므로 ...

타일 구현하는 화면 (내가 그런 식으로 그것을 사용하는 기대 때문에 어떤 일들이 주석을 ...)

public class CombatScreen extends AbstractScreen{ 

private Table board; 

public CombatScreen(SpaceGameMain game, int boardSize) { 
    // Passing game to super class and getting class name for tracking 
    super(game); 
    this.className = this.getClass().getSimpleName(); 

    // Creating tile board 
    board = new Table(); 
    /* 
    for(int i = 0; i < boardSize; i++) 
    { 
     for(int j = 0; j < boardSize; j++){ 
      board.add(new Tile()); 
     } 
     board.row(); 
    } 
    */ 
} 

@Override 
public void show(){ 
    super.show(); 
    board.add(new Tile()); 
    mainStage.addActor(board); 
} 

public void resize(int width, int height){ 
    super.resize(width, height); 

    board.setPosition((Gdx.graphics.getWidth() - Tile.width)/2, (Gdx.graphics.getHeight() - Tile.height)/2); 
} 
} 

이 테이블은 테스트를 위해 화면의 중간으로 설정됩니다.

+0

코드가 단순하고 짧은 게시물 인 경우. – BennX

+0

코드는 간단하지만 제거해야하는 많은 구현되지 않은 세부 정보가 있기 때문에 크기는 크지 만 관련 부분을 게시 할 것입니다. –

답변

2

badlogic의 포럼에서 Tanmay와 NateS의 도움을 받아 해결책을 찾았을 때, 그들은 TableLayout에 대해 더 자세히 알아 보도록 안내했습니다.

이 경우 어린이의 원래 크기는 "보드"레이아웃에 영향을 미치지 않습니다. 당신이해야 할 것은 자녀의 SIZE (안 prefSize)를 설정하는 TableLayout을 사용하는 것입니다, 그래서 작업 코드는 다음과 같이 간다 : 그냥

board.add(new Tile()).size(128, 128); 

이, 테이블을 사용하는 방법에 대한 몇 가지 간단한 오해.

감사합니다.

1

Add 메서드를 사용하면 Table 클래스는 자식을 레이아웃 할 때 getPrefWidth() 및 getPrefHeight()를 호출합니다.

기본값은 0입니다.

해결책 1) Tile 클래스의 getPrefWidth() 및 getPrefHeight()를 재정의하고 원하는 값으로 되돌립니다.

해결 방법 2) prefSize가있는 체인 테이블 추가 방법. 예 :

table.add(actor).prefSize(200,200); 
+0

그것을 묶어 보았습니다. 효과가 없습니다./ 내 코드의 다른 부분에서 거의 동일한 문제가 있었지만 작동하지 않았습니다. 기본 값에 대해서는 prefSize가 0 일 때 보이지 않습니다. 그 이유는 나를 이상한 .---로 봐야하기 때문에 128x128로 보여주기 때문입니다. 어쨌든 답장을 보내 주셔서 감사합니다. o / –

관련 문제