私はゲームに取り組んでいて、シマリスで物理学のものを実装しています。シマリスと統合するまで、cocos2dの部分はすべて順調に進んでいました。少し背景:
ゲームはブロック付きのゲームです。レベルはプロパティリストで定義され、ブロックの位置、サイズ、重力などはすべて、レベルに表示されるブロックごとに定義されます。
問題は、ブロックが表示されることです。ゲームのメインシーンの一部であるBlockLayerクラスにメソッドがあります。レイヤーの作成時に、プロパティリストが読み取られ、すべてのブロックが作成されます。次のメソッドは、ブロックを作成するために呼び出されます。
-(void)createBlock:(Block *)block withAssets:(NSBundle *)assets
{{
スプライト*スプライト;
switch(block.blockColour)
{{
ケースkBlockColourGreen:
sprite = [Sprite spriteWithFile:[assets pathForResource:@ "green" ofType:@ "png" inDirectory:@ "Blocks"]];
壊す;
ケースkBlockColourOrange:
sprite = [Sprite spriteWithFile:[assets pathForResource:@ "orange" ofType:@ "png" inDirectory:@ "Blocks"]];
壊す;
ケースkBlockColourRed:
sprite = [Sprite spriteWithFile:[assets pathForResource:@ "red" ofType:@ "png" inDirectory:@ "Blocks"]];
壊す;
ケースkBlockColourBlue:
sprite = [Sprite spriteWithFile:[assets pathForResource:@ "blue" ofType:@ "png" inDirectory:@ "Blocks"]];
壊す;
}
sprite.position = block.bounds.origin;
[自己addChild:sprite];
if(block.blockColour == kBlockColourGreen || block.blockColour == kBlockColourRed)
スペース->重力=cpvmult(cpv(0、10)、1000);
cpVect verts [] = {
cpv(-block.bounds.size.width、-block.bounds.size.height)、
cpv(-block.bounds.size.width、block.bounds.size.height)、
cpv(block.bounds.size.width、block.bounds.size.height)、
cpv(block.bounds.size.width、-block.bounds.size.height)
};
cpBody * blockBody = cpBodyNew([block.mass floatValue]、INFINITY);
blockBody-> p = cpv(block.bounds.origin.x、block.bounds.origin.y);
blockBody-> v = cpvzero;
cpSpaceAddBody(space、blockBody);
cpShape * blockShape = cpPolyShapeNew(blockBody、4、verts、cpvzero);
blockShape-> e = 0.9f;
blockShape-> u = 0.9f;
blockShape-> data = sprite;
cpSpaceAddShape(space、blockShape);
}
上記のコードでは、スプライトが表示されることはありません。ただし、「cpSpaceAddBody(space、blockBody);」をコメントアウトすると ライン、スプライトが表示されます。
ブロックの位置とサイズは、CGRectであるBlockクラスのインスタンスの「bounds」プロパティに格納されます。
重要かどうかはわかりませんが、アプリの向きは左横向きで、すべての座標はその向きに基づいています。
どんな助けでも大歓迎です。