2012-06-19 75 views
0

我不能解決如何通過觸摸觸摸位置開始進入我的方法,當觸摸開始時運行。鑄造和參數移動精靈cocos2d

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
[self schedule:@selector(moveSprite:)]; 
return TRUE; 
} 

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
[self unschedule:@selector(moveSprite:)]; 
} 

-(void)moveSprite:(ccTime) delta 
{ 

CGPoint spriteCenter = CGPointMake(player.contentSize.width /2,player.contentSize.height /2); 

CGPoint touchPoint; //how to get this touch began? 

float distanceX = touchPoint.x - spriteCenter.x; 
float distanceY = touchPoint.y - spriteCenter.y; 

float angle = atan2f(distanceY,distanceX); // returns angle in radians 

player.rotation = angle; 

} 

我也有一個問題關於[self schedule:@selector:這是否會不斷打電話給我的移動精靈的方法?正如我要讓精靈持續移動並相應地改變旋轉,因爲觸摸被按下並且精靈位置改變。

我最後的問題是關於將精靈移動到觸摸的x座標。如果我使用ccmoveto,我不能使用velocity來讓sprite慢慢增加它的速度嗎?我如何將精靈移動到觸點增加速度?我猜測它與delta有關。

+0

是什麼'自schedule'嗎?直接調用「moveSprite:」方法,傳遞UITouch事件,然後調用它的'locationInView:'方法? – 2012-06-19 17:18:56

+0

我認爲它的cocos2d相當於NSTimer,但我不確定它是否像這樣不斷調用,或者我需要添加一個區間。我不確定這是否會持續更新位置和輪換? locationInView部分將如何工作?我想我也可能需要delta來更新速度? – dev6546

回答

1

其實,我沒有看到你的預定方法有任何需要。您只需執行

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event 

方法並將您的精靈旋轉邏輯放置在那裏。

要獲得可變的移動速度,您可以使用CCActionEase子類之一。在其中一個包裹你的移動動作,你會看到移動過程中的速度變化。喜歡的東西

id move_ease_in = [CCEaseIn actionWithAction:yourMoveAction rate:3.0f]; 
[player runAction: move_ease_in]; 

你可以看到一些例子here

+0

謝謝,您能否爲速度部分展示一些示例代碼。 – dev6546