Objective C で Cocos2d を使用して iOS 用の最初のアプリを開発しています。Objective C は初めてですが、グーグルで検索しようとしましたが、この一般的な問題の解決策が見つかりません。
-(void)accelerate{
moveSpeed = 720.0 / 3.0;
[self stopAllActions];
_moving = FALSE;
CCAnimation *walkAnim = [CCAnimation animationWithFrames:_walkAnimFrames delay:0.066f];
self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
CGPoint loc = ccp(500, 200);
[self playerMoveTo:loc];
}
-(void)playerMoveTo:(CGPoint)moveLocation{
CGPoint moveDifference = ccpSub(moveLocation, self.position); //here is EXC_BAD_ACCESS
float distanceToMove = ccpLength(moveDifference);
}
これは、私のゲーム シーンから Player1 の加速を呼び出す方法です。
-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL: touchLocation];
touchLocation = [self convertToNodeSpace:touchLocation];
[self.Player1 accelerate];
}
Player1 は私の gameScene にあります:
//implementation
@synthesize Player1 = _Player1;
//header
@property (nonatomic,retain) TPlayer *Player1;
ご理解とご協力をお願いいたします。ここにコードのどの部分を入れるべきかわからなかったので、教えてください。追加します。
サイモン
EDIT 1: Player1 は、ゲーム シーンの init 関数で割り当てられます。TPlayer は CCSprite のサブクラスです:
_Player1 = [[TPlayer alloc] initWithSpriteFrameName:@"walk2"];
EXC_BAD_ACCESS は次の行で発生します。
CGPoint moveDifference = ccpSub(moveLocation, self.position);