タンク ゲームを作成していますが、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 は完全に閉じます。
エディター自体がぐらつき始めると、プログラムをデバッグするのがかなり難しくなります!)