这是我的运动方法:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
location = [touch locationInView: [touch view]];
CGPoint location_ = [[CCDirector sharedDirector] convertToGL:location];
NSLog(@"Click Position = (%f,%f)",location_.x,location_.y);
float moveSpeed = 40.0;
float moveDist = sqrt(pow(abs(location_.x - sprite.position.x),2) + pow(abs(location_.y - sprite.position.y),2));
float moveTime = (moveDist / moveSpeed);
[sprite runAction:[CCMoveTo actionWithDuration:moveTime position:location_]];
}
这是我的初始方法。
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super" return value
if( (self=[super init])) {
self.isTouchEnabled = YES;
// create and initialize a Label
[self scheduleUpdate]; // available since v0.99.3
[self schedule: @selector(update:) interval:0.5];
CGSize size = [[CCDirector sharedDirector] winSize];
bg = [CCSprite spriteWithFile:@"testBG.png"];
bg.position = ccp( size.width /2 , size.height/2 );
[self addChild: bg];
sprite = [CCSprite spriteWithFile:@"testSprite.png"];
sprite.position = ccp( size.width /2 , size.height/2 );
[self addChild: sprite];
[self runAction:[CCFollow actionWithTarget:sprite]];
}
return self;
}
我的窗口跟随精灵,但就像我说的那样,精灵将会转到与第一次触摸后触摸不同的点。谁能告诉我发生了什么?
编辑:我认为它可能与坐标系本身有关,或者可能与它有关
[touches anyObject];
?我的搜索量很少。
edit2:我发现如果我再次将我的精灵返回到bg精灵的中间,它会再次从那里恢复正常,直到距离太远。
答案 0 :(得分:1)
我认为问题出在[self runAction:[CCFollow actionWithTarget:sprite]];
。
self
是您场景,您不想四处走动。
执行此操作的模式是将CCNode
添加到_contentNode
,将scene
添加到[_contentNode runAction:[CCFollow actionWithTarget:sprite]];
并添加您想要作为孩子移动的所有内容。
然后你会打电话给{{1}}
答案 1 :(得分:0)
在这里,我建议你一个简单的事情......在添加新动作之前,停止精灵上的上一个动作......
在ccTouchesBegan方法中
[sprite stopAllActions];
[sprite runAction:[CCMoveTo actionWithDuration:moveTime position:location_]];
我认为这会有所帮助,因为一旦你触摸精灵就会停止..
在目前的情况下,它正在采取行动..假设它的持续时间是2秒。并在下次触摸时运行1秒的动作。然后它会转到错误的点,因为之前的操作仍未完成。
希望这会有所帮助.. :)