Странная проблема воспроизведения анимации cocos2d из другого класса? - PullRequest
0 голосов
/ 15 июля 2011

странная вещь. если кто-то может, пожалуйста, помогите мне. 3 дня, и я думаю, что меня уволят: (

У меня есть класс cocos2d с функцией анимации и другой класс xcode. если я вызываю функцию инициализации класса cocos2d для функции анимации, анимация воспроизводится при запуске приложения.

если я вызываю другой класс к классу-анимации cocos2d, значит, он выполняет функцию init и вводит анимацию, но я не вижу, как она воспроизводится.

так что анимация работает только если вызывается только из класса cocos. ПОЧЕМУ?

вот как я называю анимацию:

ran=[[HelloWorld alloc] init];
    [ran animation];

это анимация:

-(void)animation
{
    //[self removeChild:background cleanup:YES];
    //[b_pic.parent removeChild:b_pic cleanup:YES];



    //animation
    CCSpriteBatchNode *danceSheet = [ CCSpriteBatchNode batchNodeWithFile:@"head.png"]; 
    [self addChild:danceSheet];

    CCSprite *danceSprite = [CCSprite spriteWithTexture:danceSheet.texture rect:CGRectMake(0, 0, 480, 320)];
    [danceSheet addChild:danceSprite];
    //danceSprite.anchorPoint=CGPointMake(0, 0);

    CGSize s = [[CCDirector sharedDirector] winSize];
    danceSprite.position = ccp(s.width/2,s.height/2);

    CCAnimation *danceAnimation = [CCAnimation animation];
    [danceAnimation setDelay:0.1f];

    int frameCount = 0;
    for (int y = 0; y < 4; y++) 
    {
        NSLog(@"%@",animation);
        for (int x = 0; x < 5; x++) 
        {
            CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:danceSheet.texture rect:CGRectMake(x*320,y*440,320,440)];
            [danceAnimation addFrame:frame];

            frameCount++;

            if (frameCount == 25)
                break;
        }
    }

Ответы [ 2 ]

0 голосов
/ 16 июля 2011

решено, и я не знаю почему.

но если вы хотите вызвать функцию cocos2d извне, вам нужно сделать:

[(HelloWorld*)[[[CCDirector sharedDirector] runningScene] getChildByTag:42] HardwareEvent:DollPart];

и пометьте свой слой как:

 layer.tag=42;

на методе сцены!

это единственный способ, которым он прекрасно работает.

0 голосов
/ 16 июля 2011

Можете ли вы вызвать функцию анимации дважды в одном и том же классе ... Попробуйте

[self animation]; 

и

[[CCScheduler sharedScheduler] scheduleSelector:@selector(animation) forTarget:self 
interval:10 paused:NO]; 

и посмотрите, будет ли анимация вызываться во второй раз.

Если этого не произойдет, на данный момент я не думаю, что вы это сделаете, вы должны определить все, что можете, в init, а затем запускать только те части, которые вам нужны, в методе анимации (т.е. добавить batchNode и Sprite в init как ivars и повторно использовать их в анимации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...