私はオブジェクト "ブロック"のインスタンスをたくさん持っている、私はスプライトがブロックに触れているかどうかを確認するために衝突検出を追加する必要があります。しかし、それぞれのレベルで約200個のブロックがあるので、それぞれのコードをコピーして貼り付けて編集するのにはかなりの時間がかかります...ここでは衝突検出があります。最初のブロックの場合は 'block.bottomry'、2番目のブロックの場合は 'block2.bottomry'、3番目の 'block3.bottomry'の場合などはすべてのブロックが行った。コードの一部は次のとおりです。オブジェクトのインスタンスごとにループを作成できますか?
0
A
答えて
1
確かに:)ブロックをリストデータ構造に追加して、リストをループしてチェックします。
public class Foo {
private SpecialSprite sprite = new SpecialSprite();
private List<Block> blocks = new ArrayList<Block>();
public void addBlocks() {
blocks.add(new Block(...));
blocks.add(new Block(...));
blocks.add(new Block(...));
}
public void isCollided() {
for(Block block : blocks) {
// collision detection for each block.
if(sprite.bottomrx < block.bottomrx ...) {
Log.d(TAG, "Collided!!!!!!!!!!!!");
}
}
}
}
EDIT:より具体的な例。
0
私があなたから質問を受けるのは、ブロックが固定されており、スプライトが動いている/浮いていることです。ブロックは固定されているので、それらを配列に配置し、この衝突ロジックをfor-eachループの内側に置くことができます。
もう1つのポイントは、ブロックがスプライトの上、下、前、または後にあり、コリジョンロジックがそれぞれ異なることです。ブロックオブジェクトでは、位置を設定し、for-eachループでもその位置をチェックできます。
私はあなたがしたいパターンをブロックし、「登録」を作成し、「ファクトリメソッド」と呼ばれ
0
など、ブロックの配列は、実行時にビュー内のブロックで更新されますね。ここでそれを行いますコードは(私は答えに直接関係のないすべてのコードを残し、あなたがものを埋めるために必要がある場合があります...
を使用しました)です:
public class Block {
private static final List<Block> BLOCKS = new ArrayList<Block>();
// A private constructor means everyone has to go through `create()`,
// which is what you want so they all get registered
private Block(...) {
...
}
public static Block create(...) {
Block block = new Block(...);
BLOCKS.add(block);
}
public static boolean hasCollided(Sprite sprite) {
for (Block block : BLOCKS) {
if (sprite.bottomlx < block.bottomrx && sprite.bottomlx > block.bottomlx && sprite.bottomly < block.bottommy && sprite.bottomly > block.topry) {
return true;
}
}
return false;
}
}
あなたがBlock
を作成するたびに、Block.create()
を使用しますメソッド(これは新しいブロックが登録されたことを意味します)
スプライトが衝突したかどうかをチェックしたいときはいつでも使用してくださいif (Block.hasCollided(someSprite))
関連する問題
- 1. Pythonのループでクラスのインスタンスを作成していますか?
- 2. ルートエンティティをインスタンス化するときに集約オブジェクトを作成しますか?
- 3. ビューごとに異なるタブバーを作成できますか?
- 4. ループごとに一意のLicenseIDとパスワードを作成
- 5. アプリケーションのインスタンスごとに一意のアプリケーションデータディレクトリを作成
- 6. レジストリごとにPostgresループを作成し、別のテーブルで検索します
- 7. Javaでは、Classオブジェクトから匿名サブクラスのインスタンスを作成できますか?
- 8. オブジェクトをインスタンス化すると、スーパークラスのインスタンスが作成されますか?
- 9. MVVMLight UserControlビューモデル - ビューごとにユーザーコントロールの新しいインスタンスを作成します。
- 10. モデルごとに複数のフィクスチャファイルをレール3.2に作成できますか?
- 11. 処理:「x」時間ごとにオブジェクトを作成するには
- 12. foreachループでオブジェクトを作成する
- 13. Javaオブジェクトをインスタンス化するとき、自動的に作成される親クラスのオブジェクトですか?
- 14. トランザクションごとにCloudTableClientとCloudTableの新しいインスタンスを作成する
- 15. MEF - インスタンスを作成し、MEF内にインスタンスを自動的に作成できますか?
- 16. javascriptでCOM構造体のインスタンスを作成できますか?
- 17. 特定のクラスのインスタンスのArrayListを作成できますか?
- 18. Javaでユーザーごとに値を持つオブジェクトの配列を作成する
- 19. TypeKind = tkMethodでTRttiTypeのTRttiMethodインスタンスを作成することはできますか?
- 20. UnmarshalException:インスタンスを作成することができません
- 21. __init __(self、list = [])は、インスタンス化ごとに新しいリストではなくリストを作成しますか?
- 22. perlスクリプトでbashインスタンスを作成できますか?
- 23. Windowsでは、プロセスごとおよびマシンごとにいくつの同期オブジェクトを使用できますか?
- 24. objective-cでのオブジェクトの作成とインスタンス化
- 25. forループを使用するときにいくつのオブジェクトが作成されますか?
- 26. オブジェクトの新しいインスタンスを作成し、PHPの配列に同じ行で追加できますか?
- 27. ドメインオブジェクトごとにアクターを作成する
- 28. 訪問ごとにzend clear cacheを作成しますか?
- 29. リソースごとにfields_forフォームを作成しますか?
- 30. 変数ごとに名前付きセクションを作成しますか?
ブロックを[コレクション](http://docs.oracle.com/ .com/javase/tutorial/collections/intro/index.html) – Richante