CCMotionStreak与CCMoveTo合作

时间:2011-05-07 14:56:36

标签: cocos2d-iphone

我正在尝试使用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线会稍微“抖动”(稍微偏移一点),然后在精灵停止移动时“抖回到正常位置”。

我希望有人可以给我一个提示,谢谢:)

1 个答案:

答案 0 :(得分:0)

我怀疑这是一个时间错误。如果序列如下所示,您的CCMotionStreak将总是有点偏离:

  1. [streak setPosition:self.theHero.heroSprite.position] - Streak位于Hero的位置
  2. [CCMoveTo actionWithDuration:du ... - 英雄移动
  3. 渲染,但英雄和连胜处于不同的位置
  4. 当你停止移动时,它们会均衡。

    我建议更新Hero类中的运动条纹,或使用调度程序设置优先级,以便在[streak setPosition操作更新后CCMoveTo调用发生移动英雄。

    可能,第一步的优先级正确且有效。