可拖动 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:只有在_shouldDragMyNodeYES时才改变位置:

if (_shouldDragMyNode)
 _foodNode.position = touchLocation;

抱歉,目前无法测试代码。但是这样的事情应该可以工作。

【讨论】:

嗨磷虾。谢谢(你的)信息。尽管我正在努力检测 CCNode 上的触摸,但我明白该怎么做。 _foodnode.contentSize 不起作用,[_spongeNode BoundingBox] 也不起作用。有什么建议吗? 是的,我的错误,contentSize 不起作用,因为它是一个大小。更新了答案。但是,boundingBox 应该可以正常工作。什么是_foodNode_spongeNode,如果它们是精灵,那么它应该按原样工作。如果它们只是 CCNode,那么您应该将它们的 contentSize 设置为某个值。

以上是关于可拖动 CCNode Cocos2d的主要内容,如果未能解决你的问题,请参考以下文章

用另一个 CCSprite/CCNode 剪辑 CCSprite/CCNode - Cocos2D

cocos2D----CCLayer

CCNode 内部元素的定位

CCNode删除不起作用的Cocos2d

Cocos2d-x学习笔记CCNode分析

带有子节点的 CCNode 上的 Cocos2d-iphone v3 触摸事件检测