2

我的CCScene. MainLayer其中包含GameLayerHUDLayer。这就是它现在的样子:

[ z-Order        ] | [ Layer ]
==============================
  3 ( Top Most )   | HUDLayer
  2 ( Middle )     | GameLayer
  1 ( Bottom )     | MainLayer 

我在我的which 调用的方法上添加了触摸侦听器(ccTouchBeganccTouchMovedccTouchEnded),该方法返回该层中的触摸对象。MainLayerGameLayergetTouchedObject( CCPoint p_Loc )

我现在能够成功地“触摸” MainLayer. 现在,我要做的是将触摸的对象拖动到HUDLayer. 当我只使用一层时,我能够毫无问题地拖放不同的对象,但是需要实现CCLayers 所以我将主层分为三个不同的层。

答案不需要是 cocos2d-x。我了解一点 Obj-C 并且可以将 Obj-C 翻译成 C++,所以欢迎 cocos2d 的答案。提前致谢。

4

2 回答 2

4

最简单的方法可能是:

  1. CCLayer在最上面添加一个新的叫HoverLayer什么。这是为了模块化。
  2. 只要在任何图层上触摸精灵,就将其从该图层中删除,并将其添加为HoverLayer同一位置的子对象。用户不会“看到”任何改变。
  3. 在触摸时,拖动精灵后,检测精灵是否在其中HUDLayer
  4. 从 中删除精灵HoverLayer并将其添加到适当的图层。

笔记:

  • 您可以使用 theHUDLayer而不是HoverLayer,但您的课程会很混乱。
  • 当然,如果你在GameLayer拖动的同时保持触摸的精灵,它会HUDLayer在某个点结束,所以将精灵移动到顶层是必须的。
  • 实现给定解决方案的代码很简单。没什么特别的,真的。
于 2012-09-10T06:39:42.540 回答
3

我将在这里提供一个实现:

CCSprite* tmpSprite = getTouchedObject();
tmpSprite->retain();
tmpSprite->removeFromParentAndCleanup(false);
//do something here to get a pointer to you HUDLayer
//for example myHud = GameLayer->getChildByTag(HUD_TAG);
myHud->addChild(tmpSprite);
tmpSprite->release();
于 2012-09-10T06:57:39.993 回答