2012-11-17 53 views
1

我正在製作一個有敵人拍攝東西的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]]; 



} 

}

彈:

}

碰撞(在enemy2部分):

-(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]; 


     } 

    } 
+1

創建存儲字符的運動狀態的BOOL。只要字符開始運行並停止運行,將布爾值設置爲運行或不運行(YES或NO)。 – tallen11

+0

我該怎麼做?移動代碼是 CCMoveTo * move = [CCMoveTo actionWithDuration:0.8 position:ccp(f,s)]; [enetw runAction:repeatforever];[enetw runAction:[CCSequence actions:move,nil]]; 如何在運行代碼時設置它? – Alexyuiop

+0

瞬間添加答案 – tallen11

回答

1

我會創建一個存儲BOOL是否而不是角色正在移動。只要角色即將移動,請將BOOL設置爲YES。由於您正在使用動作來移動精靈,因此您可以使用一系列動作,其中第一個動作是移動動作,然後第二個動作是將您的BOOL設置爲NO的塊。這樣,一旦移動動作完成,它就會被存儲起來供以後參考。它看起來像這樣。

BOOL isObjectMoving;將這個其他地方,可能在實體子類或任何其他

CCMoveTo *move = [CCMoveTo actionWithDuration:0.8 position:ccp(f,s)]; 
CCCallBlock *end = [CCCallBlock actionWithBlock:^{ 
    isObjectMoving = NO; 
}]; 

isObjectMoving = YES; //Set it to YES until the movement action finishes and sets it back to NO 

[yourObject runAction:[CCSequence actionOne:move actionTwo:end]]; 
+0

謝謝!它工作正常 – Alexyuiop

相關問題