Как запустить метод в рамках CCAction? - PullRequest
1 голос
/ 14 мая 2011

Я сейчас на грани того, чтобы бросить свой компьютер в стену, потому что я не могу понять это. Я сделал около 200 поисков в Google, и каждая ссылка была нажата на странице 6 лайков. Я не могу найти ответ. Так вот грязь:

Я хочу, чтобы в моем классе врагов был метод стрельбы. Достаточно просто, верно? Ну, у меня есть действие для перемещения врагов в методе HelloWorldLayer. Я хочу найти способ вызвать (некоторый тип) CCAction этот метод из класса Enemies.m. Пожалуйста помоги! И @Lukman ваш ответ по объектно-ориентированному программированию не сработал. Спасибо!

EDIT:

Вот что в HelloWorldLayer.m необходимо для ответа:

action = [CCSequence actions:
          [CCMoveBy actionWithDuration:1 position:ccpMult(ccpNormalize(ccpSub(moveToPoint, buffDude.position)), 75)],
          [CCMoveBy actionWithDuration:3 position:ccp(buffDude.position.x,buffDude.position.y)],
          nil];

CCCallFuncO *a = [CCCallFuncO actionWithTarget:buffDude selector:(@selector(shoot:)) object:buffDude];

CCSequence *seq = [CCSequence actions:action,a, nil];

CCRepeatForever *repeat = [CCRepeatForever actionWithAction:seq];

[buffDude runAction:repeat];

А вот что есть в Enemies.m:

@implementation BigAndStrongEnemy

+(id)enemy {

BigAndStrongEnemy *enemy = nil;
if((enemy = [[[super alloc] initWithFile:@"bigAndStrongEnemy.gif"] autorelease])) {
    enemy.hp = 200;
    enemy.pointsWorth = 1000;
}
return enemy;

}

-(void)spriteMoveFinished:(id)sender {
    CCSprite *b = (CCSprite *)sender;
    [self removeChild:b cleanup:YES];
}

-(void)shoot {
    CCSprite *b = [CCSprite spriteWithFile:@"bullet.gif"];
    b.position = ccp(self.position.x,self.position.y);
    [self addChild:b];
    [bullets addObject:b];

    CGSize winSize = [[CCDirector sharedDirector] winSize];

    CGPoint point = CGPointMake((winSize.width - (winSize.width - self.position.x)),0);

    [b runAction:[CCSequence actions:
                  [CCMoveBy actionWithDuration:0.5 position:point],
                  [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)],
                  nil]];
}

-(void)shoot:(id)sender {
    BigAndStrongEnemy *e = (BigAndStrongEnemy *)sender;
    [e shoot];
}

@end

Ответы [ 2 ]

4 голосов
/ 14 мая 2011

насколько я понял, CCCallFunc - это то, что тебе нужно

3 голосов
/ 15 мая 2011

хм ... надеюсь, что это работает:

id *func = [CCCallFunc actionWithTarget:buffDude selector:@selector(shoot)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...