可拖动 CCNode Cocos2d
Posted
技术标签:
【中文标题】可拖动 CCNode Cocos2d【英文标题】:Draggable CCNode Cocos2d 【发布时间】:2014-06-16 16:22:33 【问题描述】:我已经设法使用以下代码使 CCNode 可拖动:
- (void)touchMoved:(UITouch *)touch withEvent:(UIEvent *)event
CGPoint touchLocation = [touch locationInNode:self];
// start catapult dragging when a touch inside of the catapult arm occurs
if (CGRectContainsPoint([_heroContainer boundingBox], touchLocation))
NSLog(@"YUM YUM");
_foodNode.position = touchLocation;
这可行,但是如果我触摸并拖动屏幕上的任何位置,它会移动 CCNode。我如何让它只有在被触摸时才可以拖动?
【问题讨论】:
【参考方案1】:我假设您的 touchMoved:
方法在场景本身中,这就是为什么您会独立于您在屏幕上触摸的位置收到通知(这是正确的)。
要仅在您触摸它时移动您的节点,请尝试签入touchBegan:
您触摸了您的精灵,并设置一个标志变量,您稍后将签入touchMoved:
touchBegan:
中的类似内容:
if (CGRectContainsPoint(_foodNode.boundingBox, touchLocation))
_shouldDragMyNode = YES;
else
_shouldDragMyNode = NO;
然后在touchMoved
:只有在_shouldDragMyNode
是YES
时才改变位置:
if (_shouldDragMyNode)
_foodNode.position = touchLocation;
抱歉,目前无法测试代码。但是这样的事情应该可以工作。
【讨论】:
嗨磷虾。谢谢(你的)信息。尽管我正在努力检测 CCNode 上的触摸,但我明白该怎么做。_foodnode.contentSize
不起作用,[_spongeNode BoundingBox]
也不起作用。有什么建议吗?
是的,我的错误,contentSize
不起作用,因为它是一个大小。更新了答案。但是,boundingBox
应该可以正常工作。什么是_foodNode
或_spongeNode
,如果它们是精灵,那么它应该按原样工作。如果它们只是 CCNode,那么您应该将它们的 contentSize 设置为某个值。以上是关于可拖动 CCNode Cocos2d的主要内容,如果未能解决你的问题,请参考以下文章