0

タンク ゲームを作成していますが、Cocos2d CCAnimate に問題があります。具体的には、CCAnimation 変数が自然にデータを失っています。

それらは、タンク オブジェクト (tank.m) のステート チェンジャーで使用されます。

-(void)changeState:(CharacterStates)newState {
    [self stopAllActions];
    id movementAction = nil;
    action = nil;
    //CCLOG(@"Change state from %i to %i",self.characterState, newState);
    [self setCharacterState:newState];

    switch (newState) {
        case kStateIdle:
            action = [CCAnimate actionWithAnimation: idleAnim       //**ANIM
                               restoreOriginalFrame:NO];            //**ANIM
            [action setTag:kStateIdle];
            break;

        case kStateMoving:
            action = [CCAnimate actionWithAnimation: movingAnim  //**ANIM
                               restoreOriginalFrame:NO];         //**ANIM
            break;

    }

    if (action != nil) {
        [self runAction:action];
    }
}

「アクション」はタンクの .h ファイルで事前定義されています - 「id action;」

ゲームが初期化されると、タンク (4 つある) は問題なく初期化され、すべての問題なく「kStateIdle」に設定されます。

次に、GameEngine のメイン ループが更新のためにタンクを呼び出します - タンクの速度をテストし、タンクがまだ移動していないことやダメージを受けていないことを確認し、状態が「kStateMoving」に変更されます -

if (self.characterState != kStateMoving && self.characterState != kStateTakingDamage && abs(velocity)>0.4) {
        [self changeState:kStateMoving];

しかし、ゲームが始まると

[CCAnimate actionWithAnimation: movingAnim restoreOriginalFrame:NO];

Cocos2d が「CCActionInterval」の「EXC_BAD_ACCESS」でクラッシュします (デバッガーは _cmd を「initWithAnimation: restoreOriginalFrame」として報告します)。

その理由は、CCAnimation の「movingAnim」(および idleAnim) が突然破損したためです。デバッガで調べると、メモリ アドレスはあるのに、フレームの値が報告されません。タンクが初期化されたとき、それらはすべて正常でした。そして、それらはすべてプレイヤータンクに問題ありません。それらを解放するものは何もありません (Dealloc メソッドからも削除しました)。

tank.h ヘッダー ファイルで (単原子、保持) プロパティとして定義しています。

それで、彼らはどこに行ったのでしょうか?それらにウォッチポイントを設定する方法はありますか? (私はXcode 4.3.2を持っているので、メニューには何もありません..または、データを保持するように定義する方法はありますか?

乾杯!

カール

(PS.うわー!そして、3259 度で計算された角度を取得し始めます。頭をかき、数字をトレースし始めます (それらを見るたびに通常に戻ります)。バム!Xcode は完全に閉じます。

エディター自体がぐらつき始めると、プログラムをデバッグするのがかなり難しくなります!)

4

0 に答える 0