2017-01-02 2 views
-2

나는 libgdx 튜토리얼을보고 카메라를 사용하고 타일을 사용하여 맵을 만드는 방법을 배웠다. 그러나 나는 약간의 문제를 만난다. 나는 약간의 아이디어를 원한다. RPG 게임을 만들고 싶지만 위치와 같은 각 괴물의 정보를 외우고 싶습니다. 그러나지도가 너무 커서 렌더링 양을 줄여야합니다. 많은 자원을 사용하지 않고 캠 밖에있는 괴물을 포함한 각 괴물의 정보를 어떻게 보관할 수 있습니까?libgdx - 캠 외부의 객체 처리

+0

것은 당신이 큰지도를 들어,이 방법이라고 클리핑를 사용해야합니다 . 정보를 저장하는 데 필요한 위치, 텍스처 영역 및 요법과 같은 정보가있는 Java 객체를 만듭니다. –

답변

1

libGDX에서 이미 TiledMap으로 작업 했었다고 가정합니다. 당신은 당신이 그것을 전달하는 Camera 객체를 사용하여 당신을 위해 화면의 정확한 부분을 렌더링하는지도를 그리기 위해 OrthogonalTiledMapRenderer를 사용할 수 있습니다

당신의 엔티티를 관리하기위한
OrthogonalTiledMapRenderer renderer = 
    new OrthogonalTiledMapRenderer(myMap, 1/16f); // Change this to your render scale 
                //e.g. 1/32f means your tiles are 32px wide 

OrthographicCamera camera = new OrthographicCamera(16, 9); //viewport size: 16x9 

... 

//Inside your class that implements Screen or extends Game 
public void render(float delta) { 
    ... 
    renderer.setView(camera); 
    renderer.render(); 
    ... 
} 

the Ashley framework를보십시오. 모든 엔티티에 위치가 포함 된 Component을 부여한 다음 렌더링 시스템을 작성하여 그 위치를 그릴 수 있습니다.

엔티티는 TiledMap에 포함되어 있지 않으므로 직접 그려야하지만, 우선 system using Box2dDebugRenderer 구현이 도움이 될 수 있습니다. 당신이 Box2D의를 사용하여 하지 경우

은 여기에 사용되는 방법에의 예 EntitySystem (테스트하지) :

public class RenderingSystem extends IteratingSystem { 

    public static final Family MONSTERS = Family.all(BoxComponent.class).get(); 
    //Assumes you've made a BoxComponent class 

    private ShapeRenderer shapes; 
    private Camera camera; 

    public RenderingSystem(Camera camera) { 
     super(MONSTERS); 
     this.camera = camera; 
     this.shapes = new ShapeRenderer(); 
    } 

    @Override 
    public void update(float deltaTime) { 
     shapes.begin(ShapeType.Line); 
     shapes.setColor(Color.RED); 
     super.update(deltaTime); 
     shapes.end(); 
    } 

    @Override 
    protected void processEntity(Entity entity, float deltaTime) { 
     Rectangle box = entity.getComponent(BoxComponent.class); 
     //^Could be done faster using ComponentMappers 
     shapes.rect(box.x, box.y, box.width, box.height); 
    } 

} 
+0

정보를 주셔서 감사합니다,하지만 나는 애슐리 프레임 워크를 사용하는 법을 모르겠다 ... 나는 프로그래밍에 아주 익숙하다. 내 프로젝트에 라이브러리를 어떻게 구현할 수 있습니까? – sunmaggot

+0

프로젝트를 짓기 위해 Gradle을 사용합니까? 그렇다면이 줄을 여기에 추가하여 gradle 파일에 추가하고 재구성 할 수 있습니다 (https://github.com/libgdx/ashley/wiki/Getting-started-with-Ashley#gradle). 없다면, libGDX는 Gradle을 사용하기 때문에 Eclipse를 사용한다면 [this] (https://github.com/libgdx/libgdx/wiki/Gradle-and-Eclipse)를 사용하여 IDE (Eclipse/IntelliJ)로 가져올 수 있습니다 IntelliJ를 사용하는 경우에는 [this] (https://github.com/libgdx/libgdx/wiki/Gradle-and-Intellij-IDEA)를 입력하십시오. NetBeans 섹션 [여기] (https://github.com/libgdx/libgdx/wiki/Gradle-and-NetBeans)도 있습니다. – Moira

+0

물론, Gradle을 지금 다루지 않으려면 프로젝트를 다시 생성 할 수 있습니다. [Ashley] (http://i.imgur.com/BjUgEmn.png)를 선택하고 이전 코드를 모두 복사하십시오. 꽤 유용하고 모든 것을 더 쉽게 만들어주기 때문에 Gradle을 사용하는 법을 배우는 것이 좋습니다. – Moira