敵が物を撃つcocos2dアプリを作っています。多くの場合、チームメイトが殺されるとランダムな場所に移動するようにプログラムされたスプライトが、同種の他の敵のクロスファイアに直撃します。ほとんどの場合、ゲームは敵が自殺しようとしているように見えるため、動いているかどうかを確認するために何かを作成するにはどうすればよいですか。敵が自分自身にできるようにしたいのですが、動いているときはそうではありません。
-(void)enemy2{
enemy2 = [CCSprite spriteWithFile:@"enemy2.png"];
int d = arc4random()%480+480;
int o = arc4random()%320+320;
x = arc4random()%480;
if( x <= 480 && x>= 460){
x=x-100;
}
if(x <= 100){
x = x+50;
}
y = arc4random()%320;
if(y <=320 && y >= 290){
y = y-100;
}
if(y < 100){
y = y + 100;
}
enemy2.position = ccp(o,d);
xc = x;
te = y;
[enemytwo addObject :enemy2];
[self addChild:enemy2];
for(CCSprite *enetw in enemytwo){
CCRotateBy *rotation = [CCRotateBy actionWithDuration:15 angle:1080];
CCRepeatForever * repeatforever = [CCRepeatForever actionWithAction:rotation];
int f = arc4random()%480;
int s = arc4random()%320;
if( f <= 480 && s>= 460){
f=f-100;
}
if(f <= 100){
f = f+50;
}
s = arc4random()%320;
if(s <=320 && s >= 290){
s = s-100;
}
if(s < 100){
s = s + 100;
}
CCMoveTo *move = [CCMoveTo actionWithDuration:0.8 position:ccp(f,s)];
[enetw runAction: repeatforever];
[enetw runAction:[CCSequence actions:move, nil]];
}
}
投射物:
-(void)projectileShooting:(ccTime)dt {
[self schedule:@selector(projectileShooting:) interval:2.5];
projcount++;
if([proj count] <= 15 )
if(enemy1.position.y < 320){
v = ccp(player.position.x,player.position.y);
for(CCSprite *enemies in enemy){
CCSprite * projectilebullet = [CCSprite spriteWithFile:@"Projectile.png"];
[proj addObject:projectilebullet];
[self addChild:projectilebullet];
CGPoint MyVector = ccpSub(enemies.position,player.position );
MyVector = ccpNormalize(MyVector);
MyVector = ccpMult(MyVector, enemies.contentSize.width/2);
MyVector = ccpMult(MyVector,-1);
projectilebullet.position = ccpAdd(enemies.position, MyVector);
}
}
for(CCSprite *enem2 in enemytwo){
if( [proj count] <= 15){
CCSprite * projectilebull = [CCSprite spriteWithFile:@"Projectile.png"];
CGPoint MyVector = ccpSub(enem2.position,player.position );
MyVector = ccpNormalize(MyVector);
MyVector = ccpMult(MyVector, enem2.contentSize.width/2+10);
MyVector = ccpMult(MyVector,-1);
projectilebull.position = ccpAdd(enem2.position, MyVector);
[self addChild:projectilebull];
[proj addObject:projectilebull];
for(CCSprite *projectile in proj){
}
}
}
}
-(void)bulletMovement:(CCSprite *)bullet{
CGPoint location = ccpSub(bullet.position, player.position);
location = ccpNormalize(location);
location = ccpMult(location, -1);
bullet.position = ccpAdd(bullet.position, location);
}
衝突 (敵2 セクション内):
-(void)update{
deletehealth = [[NSMutableArray alloc] init];
enemytwodelete = [[NSMutableArray alloc]init];
enemythreedelete2 = [[NSMutableArray alloc]init];
NSMutableArray *playerdelete = [[NSMutableArray alloc] init];
NSMutableArray * deleteclean = [[NSMutableArray alloc]init ];
projectilesToDelete = [[NSMutableArray alloc] init];
enemydelete = [[NSMutableArray alloc]init];
for(CCSprite *projectile in proj)
{
CGRect project = CGRectMake(projectile.position.x - (projectile.contentSize.width/2),
projectile.position.y - (projectile.contentSize.height/2),
projectile.contentSize.width,
projectile.contentSize.height);
CGRect playerRect = CGRectMake(player.position.x - (player.contentSize.width/2),
player.position.y - (player.contentSize.height/2),
player.contentSize.width,
player.contentSize.height);
if (CGRectIntersectsRect(playerRect, project)) {
[projectilesToDelete addObject: projectile];
emitter = [[CCParticleExplosion alloc] init];
emitter.texture = [[CCTextureCache sharedTextureCache]addImage:@"particle.png"];
emitter.position = ccp(projectile.position.x,projectile
.position.y);
[self addChild:emitter];
// NSLog(@"%i",life);
if(life > 0){
//lifeholder = [[NSMutableArray alloc] init];
life -= 5;
[self.progressTimer setPercentage:life];
}else{
[playerdelete addObject:player];
emitter.position = ccp(projectile.position.x,projectile
.position.y);
[[CCDirector sharedDirector]replaceScene:[CCTransitionFade transitionWithDuration:3 scene:[end node]]];
}
}
for(CCSprite*enemies in enemy){
CGRect enemyRect = CGRectMake((enemies.position.x-5),
enemies.position.y-8.3,
7,
15);
if(CGRectIntersectsRect(enemyRect, project)){
enemyex = [[CCParticleExplosion alloc] init];
enemyex.texture = [[CCTextureCache sharedTextureCache]addImage:@"particle.png"];
enemyex.position = ccp(enemies.position.x, enemies.position.y);
[self addChild:enemyex];
[enemydelete addObject:enemies];
[projectilesToDelete addObject:projectile];
[self powerups];
[self clear];
}
}
for(CCSprite * enemies2 in enemytwo){
CGRect enemy2Rect = CGRectMake(enemies2 .position.x - (enemies2 .contentSize.width/2),
enemies2 .position.y - (enemies2 .contentSize.height/2),
enemies2 .contentSize.width,
enemies2.contentSize.height);
if(CGRectIntersectsRect(enemy2Rect, project)){
explode = [[CCParticleExplosion alloc] init];
explode .texture = [[CCTextureCache sharedTextureCache]addImage:@"particle.png"];
explode .position = ccp(enemies2.position.x, enemies2.position.y);
[self addChild:explode ];
[enemytwodelete addObject:enemies2];
[projectilesToDelete addObject:projectile];
[self powerups];
[self clear];
}
}