为每次新触摸重新初始化ccMotionStreak

时间:2011-08-11 16:40:50

标签: iphone ios4 cocos2d-iphone

我正试图在我的iPhone / cocos2d游戏中追踪用户手指在屏幕上的移动。

到目前为止,我可以使用在我的GameLayer接口中声明的ccMotionStreak并在我的init方法中初始化。为了绘制用户的触摸,我将以下代码放在touchesMoved:

UITouch *touch = [touches anyObject];
[streak setPosition:[self convertTouchToNodeSpace:touch]];

这一直有效,直到我抬起手指并在屏幕上进行新的触摸动作。我的游戏没有画出新的连胜,而是将旧条纹的结尾连接到我的新滑动的开头,并继续相同的条纹。这不是我想要的。

有没有办法重置我的ccMotionStreak?如果没有,明显的解决方案似乎是在每次新的触摸上创建一个新的条纹(并删除旧的),但我不能让它工作。当我将我的条纹的初始化代码从init方法移到touchesBegan时,条纹根本不再显示。

我猜这应该是基本的实现,但我无法弄清楚语法。我还在学习ObjC / cocos2d。有人可以帮忙吗?

以下是我在init方法中初始化streak的方法:

streak = [CCMotionStreak streakWithFade:3.0 minSeg:1 image:@"streak.png" width:4 length:8 color:ccc4(128,128,128,255)];
[self addChild:streak];

1 个答案:

答案 0 :(得分:0)

您是否删除/释放ccTouchesEnded和ccTouchesCancelled上的旧条纹?

// in ccTouchesBegan
streak = [CCMotionStreak streakWithFade:3.0 minSeg:1 image:@"streak.png" width:4 length:8 color:ccc4(128,128,128,255)];
[streak setPosition:location];
[self addChild:streak];

// in ccTouchesEnded and ccTouchesCancelled
if (streak) {
    [streak removeFromParentAndCleanup:YES];
    streak = NULL;
}