我已经在精灵对象上实现了拖动,如下所示..
-(BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
CGPoint location = [[Director sharedDirector] convertCoordinate: [touch locationInView:touch.view]];
[diskSprite setPosition:ccp(location.x , location.y )];
return kEventHandled;
}
但这种拖延并不顺利..... 当我用拇指快速拖动物体离开路径时。
由于
答案 0 :(得分:10)
可能有点迟了但我正在寻找类似的东西。 我发现这个很棒的教程解释了一切: http://www.raywenderlich.com/2343/how-to-drag-and-drop-sprites-with-cocos2d
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];
CGPoint translation = ccpSub(touchLocation, oldTouchLocation);
CGPoint newPos = ccpAdd(mySpriteToMove.position, translation);
mySpriteToMove.position = newPos;
}
答案 1 :(得分:1)
我的游戏遇到了同样的问题。拖动操作显得生涩。我相信原因是触摸事件的生成速度不够快,无法提供平滑的外观。
为了解决这个问题,我通过在sprite上向所需位置运行一个动作来平滑运动,而不是立即设置位置。
答案 2 :(得分:0)
我不确定你所说的“从路径上留下的物体”是什么意思。我想你的意思是,如果你用手指在屏幕上以弧形或圆形拖动,那么精灵将从一点到另一点“跳跃”,而不是精确地按照你的手指。这是对的吗?
如果你想让你的精灵遵循一个确切的路径,你必须创建一个路径,然后设置精灵来跟随它。您现在所做的只是将精灵的位置设置为触摸位置,但“拖动”触摸不会为其触摸的每个像素创建事件。
为接收的触摸创建路径相当容易,并且可以在这里和那里找到代码样本。但是,如果精灵的速度(以每帧像素为单位)太高,即使使用平滑路径,也总会看到它“跳跃”。
例:
您可以在圆形路径上为精灵设置动画。如果您设置动画以在1秒内完成路径,您可能会看到平滑的动画。但是如果它以高速运行,就像4帧中的整圆一样,你只会在4个位置看到你的精灵,而不是在光滑的圆圈中。
如果你想“纠正”那个,你需要考虑混合,或者确定可接受动作的最大速度是什么,并在速度过快时减慢你的精灵。
我希望能回答你的问题。如果不清楚,请随时编辑您的问题,或在我的答案中添加评论。
答案 3 :(得分:0)
看看这里,我建议你在这种情况下尝试:
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
if (_binCaptured) {
CGPoint location = [self convertTouchToNodeSpace:touch];
[_sprite stopAllActions];
id move = [CCEaseIn actionWithAction:[CCMoveTo actionWithDuration:0.1 position:ccp(location.x, _sprite.position.y)]];
[_sprite runAction:move];
}
}
它真的很顺利。
我很喜欢这种方式。