2012-05-16 2 views
21

간단한 태양 광 시스템 시뮬레이터를 쓰고 있습니다. 이것은 첫 번째 libgdx 프로젝트입니다. 저는 메인 메뉴에 스테이지와 액터를 사용하고 있으며 특히 터치 이벤트 처리에 매우 편리합니다. 하지만 ... 예제를 보면 아무도 실제 게임 논리에서 배우를 사용하지 않는다는 것을 알 수 있습니다. 나는 배우를 행성 클래스의 부모로 사용해야하거나 그냥 내 자신의 클래스 토르를 써야한다면 방황한다. 행성은 접촉 할 수 없으며 프레임 사이에서만 움직입니다. 따라서 MoveBy 동작의 세 번째 매개 변수는 프레임 사이의 시간이어야합니다. 그건 죄수입니다. 배우를 사용하는 데 필요한 전문가는 무엇입니까?libgdx에서 액터를 사용해야 할 때? 죄수 및 찬성이란 무엇입니까?

+5

많은 libGDX 예제가 Stage + Actor 지원을 선행한다고 믿습니다. 그래서 그 사용 이유를 설명 할 수 있습니다. –

답변

36

액터의 주된 장점은 액션, 히트 테스트 및 터치 이벤트 및 액터 그룹입니다.

게임 로직에 필요한 경우 작업을 수행하면 빠르고 쉬운 트위닝이 가능합니다.

언제든지 true를 반환하는 첫 번째 액터를 반환하기 위해 stage.hit (x, y)를 호출 할 수 있습니다 (일반적으로 x, y, 너비, 높이로 경계를 확인). 이 액터 나 null을 반환하면 배우의 히트 메소드를 반복하여 히트 배우를 계속 찾을 수 있습니다. 액터가 히트되어 있지 않은 경우는 null가 리턴됩니다.

무대는 스테이지의 터치 이벤트에 사용됩니다. 액터의 터치 메소드는 로컬 좌표를 전달하고 스테이지는 객체의 중첩을 처리합니다. 배우가 다른 배우를 포함하여 다른 배우가 touchDown을받지 않아야하는 경우, 커버하는 배우에게 true를 반환하여 "아래"배우의 touchDown 호출을 중지합니다. 또한 Actor의 touchUp이 호출되도록 true를 반환하는 액터에 'focus'를 설정합니다.

전체 액터 그룹에 대해 액션, 터치 이벤트 등을 수행하기 위해 액터를 그룹으로 묶을 수 있습니다.

일부 단점 : 액터는 기능을 다소 제한하는 단계가 필요합니다. 많은 코더는 scene2d 액션 (예 : box2d)보다는 게임 객체 상태를 결정하는 데 다른 로직을 사용합니다. 게임 객체에 액터를 사용하는 경우 UI와 게임 월드에 각각 하나씩 두 개의 스테이지가 필요합니다. 그들을 사용하지 않으면 어쨌든 자신의 SpriteBatch 및 카메라를 사용하고있을 것입니다. 액터에는 추상 Draw 메서드 만 있으므로 그리기 논리를 만들어야합니다. TextureRegion 또는 Sprite는 액터의 비공개 필드로 유지할 수 있습니다. 독자적인 업데이트 로직을 사용하려면, 행위 (float delta) 메소드를 오버라이드하여 델타 시간을 얻습니다 (액션을 사용하는 경우 super.act (delta) 호출).

자신 만의 논리를 가지고 있고 Stage가 제공해야하는 것을 많이 사용하지 않으면 리소스를 절약하고 응용 프로그램 별 솔루션을 구상하십시오. 필요한 기능을 제한하지 않고 일부 전문가를 사용할 수 있다면 게임 논리의 두 번째 스테이지로 이동하십시오.

+1

Scene2D와 box2d를 모두 사용할 수 있지만, 어색하게 느껴질 수도 있습니다. 일반적으로 완벽하게 가능하며 실제로하고 있습니다. 동적 객체의 경우 물리 모델에서 액터의 위치를 ​​간단히 파생시킵니다. 물론 이것은 모션이 물리에서 배우로 이동하기 때문에 '액션'은 다소 의미가 없다는 것을 의미합니다. 그러나 입력 처리, 이벤트 시스템, 카메라 처리 및 좌표 매핑은 무료입니다. 물리적 본문이없는 시각적 요소 (예 : 장착 된 항목, 효과 스프라이트 등)에도 작업을 계속 사용할 수 있습니다. – Matthias

관련 문제