私は現在、iPhone の画面に一連の泡を描かなければならないゲームに取り組んでいます。各バブルには、PhysicsEditor という名前のポリゴン物理エディタを使用して描画された独自のシマリス ボディがあります。それを使用して、シマリスの体を作成するために必要な情報 (質量、弾性、アンカーポイントなど) を含む .plist ファイルを作成しました。
以下は、指定された座標でバブルを作成するために使用するコードです。
- (cpBody *)drawBubblesWithX:(int)x andY:(int)y {
NSString *name = names[arc4random() % 7];
CCSprite *sprite; // Will contain the sprite object if name isn't Nil
// create physics shape
[[GCpShapeCache sharedShapeCache] anchorPointForShape:@"BubbleSlot"];
cpBody *body = [[GCpShapeCache sharedShapeCache] createBodyWithName:@"BubbleSlot" inSpace:space withData:nil];
cpBodySetPos(body, cpv(x, y));
if (name != nil) { // If a color has been selected
// create and add sprite
sprite = [CCSprite spriteWithFile:[NSString stringWithFormat:@"%@.png", name]];
[self addChild:sprite];
// set the position of the sprite to be the same as the physics body
sprite.position = CGPointMake(x, y);
// set the position of body based on the sprite object
cpBodySetUserData(body, (__bridge cpDataPointer)(sprite));
}
return body;
}
[[GCpShapeCache sharedShapeCache] オブジェクトには、ボディの作成に使用される .plist ファイルが含まれています。.plist には、「BubbleSlot」という名前のボディが 1 つだけあり、ゲーム内のすべてのバブルを作成するためのテンプレートとして使用されます。
ボディのアンカーポイントは約 (0.5, 0.5) です。
私の問題は、cpBodySetPos() 関数が物理オブジェクトの位置を設定しないことです。アンカーポイントによって変更されます。たとえば、cpBody オブジェクトの位置を iPhone 画面の中央に設定するには、cpBodySetPos(body, cpv(160,240)) を実行します。しかし、何らかの理由で、.plist ファイル内のボディのアンカーポイントを (160,240) の値で設定し、それに応じてボディを作成する必要があります。