2014-01-31 3 views
0

나는이 수업이 있습니다어떻게 그리기 방법 위치를 무시 배우 서브 클래스의 위치를 ​​설정하는

public class MyActor extends Actor{ 
TextureRegion region; 

public MyActor(TextureRegion region) 
{ 
    this.region = region; 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.draw(region, 0, 0); 
} 

} 

을 그리고는 다음과 같이 여기의 활용 :

public class MyGame implements ApplicationListener { 

Stage stage; 
MyActor myActor; 

@Override 
public void create() { 
    stage = new Stage(0, 0, false); 
    myActor = new MyActor(new TextureRegion(new Texture(
      Gdx.files.internal("texture.png")))); 

    myActor.setPosition(200, 50); 
    stage.addActor(myActor); 

} 

@Override 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
} 
} 

MyActor 클래스에서 배우의 위치를 ​​(0, 0)으로 설정했습니다. 실제로 무대 위에 그려지기 전에 위치를 바꿀 수 있기를 원했기 때문에 이걸 일종의 기본값으로 사용했습니다. 그 이유는 몇 가지가 있습니다 MyActor 개체와 나는 그들을 무대에서하지만 다른 위치에 그려 싶어요.

그래서 나는 myActor.setPosition(200, 50);을 만들었지 만 작동하지 않았습니다.

내 질문 : draw(Batch, float)에 설정된 위치 이외의 위치로 스테이지에 myActor을 어떻게 그릴 수 있습니까?

답변

2
public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.draw(region, 0, 0); 
} 

super.draw 여기에서 전화를 제거하십시오. 지금 당장은 아무 것도하지 않아야합니다. 어떤 일이라면 문제가 발생할 것입니다.

또한 배우 위치가 사용되지 않는다고 불평했습니다. 당신이 그것을 사용하지 않았기 때문입니다. 대신이 같은

시도 뭔가 대신 당신이 Actor의 하위 클래스 Image을 확장 할 수 Actor를 확장

public void draw(Batch batch, float parentAlpha) { 
    batch.draw(region, getX(), getY()); 
} 
+0

하지만 우리는 왜 Actor 내에서 getX(), getY()를 사용해야합니까? 우리가 여전히 외부 값에 따라 위치를 계산해야한다면 왜 배우가 필요할까요? – rdbmsa

+0

'Actor'는 씬 그래프 인 Scene2D의 일부입니다. 장면 그래프의 모든 노드는 부모를 기준으로 로컬 좌표계를가집니다. 따라서 getX() 및 getY()는 * local * 좌표를 반환합니다. 결과 위치는 바깥 쪽 값을 기반으로하지만주의 할 필요가 없습니다. 장면 그래프는 당신을 위해 그것을 돌볼 것입니다. 장면에 엔티티의 계층 적 구조가 없다면 거의 이점이 없습니다. 클릭 수 등을 처리하기 위해 EventListeners를 등록 할 수있는 것 외에도. – noone

0

. Image에는 이미 Drawable이 포함되어 있습니다 (의 생성자에서 TextureRegion을 사용할 수 있음). 그런 다음 Image에 당신은 필요한 경우 일부 controlls를 수행 draw(Batch batch, float parentAlpha)을 무시하고 suoer.draw(batch, parentAlpha) 및 호출 할 수 있습니다 -subclass 거기 Actor ... 올바른 position, rotation, scale에 그려집니다

편집 :Image이의 서브 클래스 Widget. Widget 그 자체는 Actor입니다. LibGDX Api :

위젯 범위 내에서 다양한 방법으로 도면을 표시합니다. 기본 크기는 드로어 블의 최소 크기입니다. TextureRegionDrawable을 사용할 때만 액자의 축척, 회전 및 원점이 도면시 사용될 이됩니다.

TextureRegionDrawable을 사용하는 경우 필요한 경우 회전, 축척 및 원점을 Actor으로 처리합니다. 그것은 Actor 클래스는 모든 것을하고

또 다른 편집이 있습니다 당신은 당신이 단순히 MyActor extends Image있을 수있는 다른 데이터를 저장할 필요가 말했듯이. MyActor에서 필요한 모든 데이터를 저장할 수 있지만 더 이상 이미지를 저장할 필요가 없으므로 더 이상 그리기에 신경 쓸 필요가 없습니다. 그래서 이것은 단지 제안 일뿐입니다.

+0

당신은 내 대답을 향상시키고 다른 사람들을 도울 수 있도록 downvote의 이유를 알려주실 수 있습니까? 감사합니다. – Springrbua

+0

MyActor 클래스가 이미지 일뿐만 아니라 이미지를 확장 할 수 없습니다. –

+0

이미지에는 배우가하는 모든 기능이 있습니다. 따라서 액터를 확장하고 TextureRegion을 저장하면 이미지를 직접 확장하는 것과 거의 같습니다. – Springrbua

관련 문제