2017-07-15 23 views
1

私は、人々がコインを拾うことができるようにしようとしています。すべてのコインを更新するためにforループを作成しました。 * 25 = 6250回のティック/フレーム毎のループ、それをより効果的にする方法はありますか?私のpingは電話で遊んでいる間に30に落ちないでしょうか?効果的なポリゴンの衝突検出

スクリーンコードをレンダリング:

for (int i = 0; i < coins.size(); i++) { 
    Coin coin = coins.get(i); 
    coin.update(delta); 
} 

コイン更新方法:

for (int i = 0; i < GameScreen.players.size(); i++) { 
    Player player = GameScreen.players.get(i); 
    if (Intersector.overlapConvexPolygons(polygon, player.getPolygon())) { 
     //Picked up give coins blahblahblah 
     break; 
    } 
} 

coins.size 250

あるとplayers.sizeは私がやって開始すると25

+0

この質問は、[ゲーム開発スタックエクスチェンジ](https://gamedev.stackexchange.com/)上で(まだ回答されていない場合)より適切かもしれません。 – Bobulous

+0

@Bobulousそれは両方の中にあります。 LibGDXはgamedevです、はい。しかしそれはまたプログラミングです。これは両方のサイトで話題になります。 (重複していない限り、それは別の問題です。質問の内容は両方のサイトで話題になります。) – Zoe

+0

@ LunarWatcherしたがって、私は閉会に投票していません。しかし、ゲーム開発と密接に関連しているこの問題は、より専門的なチャネルからより迅速で知識豊かな答えを得ることが期待されます。 – Bobulous

答えて

0

私は空間グリッド検出を行うことでこの問題を修正しました。ループの量を〜40倍削減しました。

0

ですプレイヤーの視点からのみチェックする - コインは、何かが共同であるかどうかを確認する必要はありません硬貨と相互作用する選手以外に他のものがない限り、それらと一緒に乗ること。プレイヤーの形状に応じて、プレイヤーにプレイヤーの特定の半径内のすべてのコインを拾い上げさせるだけでもうまくいくかもしれません。プレイヤーから各コインまでの距離を見つけて選びますそれがその距離以内ならコインをアップしてください。 (実際には距離の二乗をチェックする方が効率的です - 結果は同じです)。ピックアップ自体に半径を使用したくない場合は、オーバーラップが可能な距離内にあるコインに対して各プレイヤーをテストするだけで、時間が大幅に短縮されます。