我正在尝试使用CCMotionStreak来绘制带有CCSprite的路径。
初始化:
CCMotionStreak* streak;
streak = [CCMotionStreak streakWithFade:100 minSeg:1 image:@"streak.png" width:5
length:3 color:ccc4(0, 255, 255, 255)];streak.position = self.theHero.heroSprite.position;
触摸结束时:
-(void) ccTouchEnded:(UITouch*)touch withEvent:(UIEvent *)event
{
[self unschedule:@selector(doStep:)];
CGPoint touchLocation = [touch locationInView: [touch view]];
CGPoint curPosition = [[CCDirector sharedDirector] convertToGL:touchLocation];
[self.theHero.heroSprite stopAllActions];
//cal the duration, speed is set to 85.0f
float du = ccpDistance(self.theHero.heroSprite.position, curPosition) / 85.0f;
[self.theHero.heroSprite runAction:[CCMoveTo actionWithDuration:du
position:curPosition]];
[self schedule:@selector(doStep:)];
}
- (void)doStep:(ccTime)delta
{
//update the position
[streak setPosition:self.theHero.heroSprite.position];
}
当我运行演示时,CCMotionStreak第一次精美地绘制了一条线 我触摸屏幕,然后当精灵停止时,我试图触摸其他地方 在屏幕上,CCMotionStreak成功地绘制了第二行,但我注意到了 在精灵移动过程中,CCMotionStreak线会稍微“抖动”(稍微偏移一点),然后在精灵停止移动时“抖回到正常位置”。
我希望有人可以给我一个提示,谢谢:)
答案 0 :(得分:0)
我怀疑这是一个时间错误。如果序列如下所示,您的CCMotionStreak将总是有点偏离:
[streak setPosition:self.theHero.heroSprite.position]
- Streak位于Hero的位置[CCMoveTo actionWithDuration:du ...
- 英雄移动当你停止移动时,它们会均衡。
我建议更新Hero类中的运动条纹,或使用调度程序设置优先级,以便在[streak setPosition
操作更新后CCMoveTo
调用发生移动英雄。
可能,第一步的优先级正确且有效。