2017-06-03 9 views
0

おはようございます。等高線タイルベースの地図で複数の高さをレンダリング

私は等尺性のタイルの世界をちょっと混乱させてきましたが、その要素をレンダリングすることにはいくつかの疑問があります。 単一の高さマップを作成すると、最初にレンダリングした後、別の要素を上に追加して、最後の変位が正しいように見えます。

public void render(Graphics2D g2d) { 
    for(int i = 0; i < tileGrid.length; i++) { 
     Point isop = NeoMath.getInstance().cartToIso(i % yAmmount, i/yAmmount, GlobalDataStorage.tileWidth, GlobalDataStorage.tileHeight); 
     TileManager.getInstance().getTileByID(tileGrid[i]).render(g2d, isop.x, isop.y); 
    } 

    for(Entity entity : entityList) { 
     entity.render(g2d); 
    } 
} 

(エンティティの位置は、その更新内で計算されます)。

これで、すべてが同じ高さでレンダリングされるので問題はありません。問題は、他のフロアを追加しようとするときに発生します。 私は3つの高さを持ってほしいと言いましょう。私の代わりに、単一のアレイのタイルのリストのリストを持っており、それらにすべての要素をレンダリング:currentListは、エンティティのリストがある

public void render(Graphics2D g2d) { 
     int flag = 0; 
     for(int i = 0; i < tileGrid.size(); i++) { 
      Point isop = NeoMath.getInstance().cartToIso(i % yAmmount, i/yAmmount, GlobalDataStorage.tileWidth, GlobalDataStorage.tileHeight); 
      for(int k = 0; k < tileGrid.get(i).size(); k++) { 
    TileManager.getInstance().getTileByID(tileGrid.get(i).get(k)).render(g2d, isop.x, isop.y - (GlobalDataStorage.tileZ * k)); 
      } 
     while(flag < currentList.size() && 
      currentList.get(flag).getPosition().equals(new Point(i % yAmmount, i/
      yAmmount))) { 
      currentList.get(flag).render(g2d); 
      flag++; 
      } 
     } 
    } 

を。

これで、エンティティが新しい位置に移動すると、エンティティの後にレンダリングされ、エンティティの位置が運命に達するまで変更されないため、タイルによって重複してしまうという問題があります。レンダリングする前に位置を新しいものに変更することはできますが、それは他の軸で前のタイルがエンティティの後にレンダリングされることを意味し、オーバーラップのために1秒間消滅します。

レンダリング中のタイルの後ろに詰まっているので、選択矩形を描画しようとするとこれも混乱します。私はマップ全体を重ねることを望んでいないので、すべてのレンダリングが完了した後に描画することはできません。

誰かが私が試してみることができる別のアプローチを知っていますか?

ありがとうございます。

答えて

0

最初のパスでフロアレイヤ全体を描画します。次に、2番目のパスですべての壁とオブジェクトと移動するエンティティを描画します。クラシックゲーム死後:私はレンダリングの前に新しいものに位置を変えることができる

デビッドブレビク、ディアブロのプログラマは、ディアブロの話を彼のGDCでこのオプションを使用して言及しています。彼の最初の「何が間違ったのか」の例でした!

参考:https://www.youtube.com/watch?v=VscdPA6sUkc&t=20m17s

が、これはアイソメトリックゲームで、古典的なハードルですが判明します。

+0

アドバイスをいただきありがとうございます。ビデオへのリンクありがとうございました。私は興味深いことを発見し、フロアタイルをレンダリングする順序について新しいアプローチをしました。お返事ありがとうございます^ ^ – Dodrine

関連する問題