0

我无法弄清楚如何将触摸开始时的触摸位置传递给我在触摸开始时运行的方法。

-(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 我不能使用速度来使精灵慢慢增加它的速度,可以吗?如何将精灵移动到触摸点以增加速度?我猜它与三角洲有关。

4

1 回答 1

1

实际上,我认为您的预定方法没有任何必要。你可以实施

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

方法并将您的精灵旋转逻辑放在那里。

要获得可变的移动速度,您可以使用CCActionEase子类之一。将您的移动动作包裹在其中之一中,您将看到移动过程中的速度变化。就像是

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

你可以在这里看到几个例子

于 2012-06-19T18:02:54.660 回答