CCSprite
このように、ダブルタップで(爆弾を表すはずの)を作成しています。
- (void)handleDoubleTap:(UITapGestureRecognizer *)doubletapRecognizer
{
[self placeBomb];
}
-(void)placeBomb
{
NSLog(@"Bomb placed");
_circle = [[CCSprite alloc]initWithFile:@"Circle.png"];
CGPoint circle0position = ccp(_cat.position.x , _cat.position.y);
CGPoint c0TileCoordt = [self tileCoordForPosition:circle0position];
CGPoint c0TileCoord = [self positionForTileCoord:c0TileCoordt];//Supereffective way to get rid of decimals
_circle.position = c0TileCoord;
[self addChild:_circle];
id fade = [CCScaleTo actionWithDuration:3.5 scale:0];
[_circle runAction:fade];
[self performSelector:@selector(explosion) withObject:nil afterDelay:3];
}
次に-(void)explosion
、 which (驚き) を実行して爆発させます。これにより、再び checkForDamage メソッドが呼び出され、爆発の存続期間中の爆発領域内の衝突がテストされます。
問題は、爆弾 (スプライト) の量に制限を設けたくないということですが、今 2 つの爆弾を配置すると、最初の爆弾の爆発が 2 番目の爆弾の場所で発生します。これは明らかに非難できません。 、それが私がそれをするように頼むからです。爆発は に基づいてい_circle.position
ます 爆発ブロックの長さは約300行なので、ここに投稿することはお勧めしません(Heres pastebin link)が、例として checkForDamage を投稿します。
-(void)checkForDamage //Gets called with CCTime on explosion
{
bool playerHit = NO;
CGPoint bombPos = [self tileCoordForPosition:_circle.position];
for (int i = 0; i <= explosionLenght; i++)
{
CGPoint playerPosF = [self tileCoordForPosition:_cat.position];
int bombX = (bombPos.x + i);
int bombY = (bombPos.y + i);
int bombNegX = (bombPos.x - i);
int bombNegY = (bombPos.y - i);
CGPoint centre = bombPos;
CGPoint top = ccp(centre.x, bombY);
CGPoint left = ccp(bombNegX, centre.y);
CGPoint bottom = ccp(centre.x, bombNegY);
CGPoint right = ccp(bombX, centre.y);
if (CGPointEqualToPoint(top, playerPosF) ||
CGPointEqualToPoint(left, playerPosF) ||
CGPointEqualToPoint(bottom, playerPosF) ||
CGPointEqualToPoint(right, playerPosF))
{
playerHit = YES;
NSLog(@"Player hit, BOOL:%i",playerHit);
[self unschedule:@selector(checkForDamage)];
break;
}
}
[self performSelector:@selector(stopCheckDamage) withObject:nil afterDelay:2];
}
_circle
複数の爆発とダメージのチェックを同時に行うことができるように、爆弾の複数のインスタンスを作成するにはどうすればよいですか。ループしてタグ付きのスプライトを作成しようとしましたfor
が、タグでスプライトにグローバルにアクセスして実行する方法がわかりません。次のように、爆発ごとに異なるスプライトを作成することを考えました
if (explosion1exists) {explosion with circle1}, if (expl1 + expl2 exists) {expl with circle3}
しかし、せいぜい 20 ~ 30 個の爆弾を配置するだけなので、これでは非常に効率が悪く、もっと良い方法があるはずだと考えました。これを効果的に行う方法はありますか?