0

現在のゲームに問題があります。マップのために、他の物理体の動きに基づいてスプライトを動かそうとしています。これは私のコードです:

    ...
    NSMutableArray *mapObjetcs = [[[NSMutableArray alloc]init]autorelease];
    [mapObjetcs addObject:swordman];
    [mapObjetcs addObject:icon];

    CCCallFuncND* iconMap = [CCCallFuncND actionWithTarget:self selector:@selector(mapLoc:mapObj:) data:mapObjetcs];
    CCSequence* iconMapSequence = [CCSequence actions:[CCDelayTime actionWithDuration:1.0f/60.0f], iconMap, nil];;
    CCRepeatForever* iconRef = [CCRepeatForever actionWithAction:iconMapSequence];

    [self runAction:iconRef];
    }

    -(void) mapLoc:(ccTime)delta mapObj:(NSMutableArray*)mapObj
    {
    GB2Sprite *swordmanTemp = (GB2Sprite*)[mapObj objectAtIndex:0];
    CCSprite *iconTemp = (CCSprite*)[mapObj objectAtIndex:1];

    CGPoint swordmanPos = [swordmanTemp ccPosition];
    float pos = (swordmanPos.x/convFactor)+65;
    iconTemp.position = ccp(pos, 290);
}

CCRepeatForeverを使用してコードを実行するたびに、ゲームがフリーズします。CCRepeatForeverを使用せずにコードを実行すると、ゲームは無償で実行されますが、マップのアイコンを更新しないでください。誰かが私を助けることができますか?ありがとう

4

2 に答える 2

0

レイヤー自体で実行する際の問題CCRepeatForever..もちろん、ゲームがフリーズします..私が推測する別の解決策を試すことができます..別のCCRepeatForeverループを使用する代わりにupdate、レイヤーのメソッドを使用します..すでに同じことを行っているためあなたはあなた自身の行動でやりたい..

別の解決策はCCRepeatForever、アイコンスプライトと同じにすることです..そしてそのCCCallFuncNDで他のオブジェクトの位置を取ります....

これが役立つことを願っています..自分で試してみてください..うまくいかない場合..試してみます 2 コードを提供します...レイヤー自体でCCRepeatForeverループを実行しないでください.. :)

于 2012-05-05T19:08:43.727 に答える
0

このようなアクションを回避するには、必要な間隔でメソッドをスケジュールするだけです。みたいな

[self schedule: @selector(methodToBeCalled) interval: intervalInSeconds];

後でスケジュールを解除することを忘れないでください

于 2012-05-07T05:47:54.653 に答える