2017-01-02 6 views
-2

私はlibgdxチュートリアルをいくつか見て、マップを作るためにcamとuse tileを使う方法を学びました。しかし私はいくつかのアイデアがほしいと思う少しの問題に会う。 RPGゲームを作りたいけど、場所などの各モンスターの情報を覚えておきたい。しかし地図は非常に大きいので、レンダリングの量を減らす必要があります。どのように多くのリソースを使用せずにカムの外のものを含む各モンスターの情報を保持することができますか?libgdx - カム外部のオブジェクトを扱う

+0

あなた大型マップについては、お使いのクリッピングと呼ばれる方法を使用する必要があります。情報を格納するために、位置、テクスチャ領域、および必要な情報など、必要な情報を含むJavaオブジェクトを作成します。 –

答えて

1

あなたは既にlibGDXのTiledMapで作業していたと思います。 the Ashley frameworkを見てみましょう、あなたのエンティティを管理するための

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(); 
    ... 
} 

:あなたは、あなたがそれに渡すCameraオブジェクトを使用するための画面の正しい部分をレンダリングするであろう、あなたのマップを描画するOrthogonalTiledMapRendererを使用することができます。すべてのエンティティにその位置が含まれている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

情報をありがとう、しかし、私はashleyフレームワークを使用する方法を知らない...私はプログラミングに非常に新しいです。プロジェクトにライブラリを実装するにはどうすればよいですか? – sunmaggot

+0

あなたのプロジェクトを構築するために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セクション[here](https://github.com/libgdx/libgdx/wiki/Gradle-and-NetBeans)もあります。 – Moira

+0

もちろん、Gradleに対処したくない場合は、プロジェクトを再生成するだけです([Ashley](http://i.imgur.com/BjUgEmn.png)を選択して、古いコードをすべてコピーしてくださいしかし、私は非常に有用であり、すべてが楽になるので、Gradleを使う方法を学ぶことを強くお勧めします:) – Moira

関連する問題