簡體   English   中英

將對象從一個CCLayer拖放到另一個CCLayer

[英]Drag and Drop objects from one CCLayer to another

我的CCScene有三層。 MainLayer ,其中包含GameLayerHUDLayer 這就是現在的樣子:

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

我已經加入觸摸聽眾( ccTouchBeganccTouchMovedccTouchEnded我) MainLayer其中要求GameLayer的方法getTouchedObject( CCPoint p_Loc )它返回被觸摸對象在該層中。

現在,我可以成功“觸摸” MainLayer的特定對象。 現在,我要做的就是將觸摸的對象拖到HUDLayer 當我只使用一層時,我可以毫無問題地拖放不同的對象,但是實現CCLayer的需要來了,所以我將主層分為三個不同的層。

答案不必是cocos2d-x。 我了解一點Obj-C,並且可以將Obj-C轉換為C ++,因此歡迎cocos2d答案。 提前致謝。

最簡單的方法可能是:

  1. 在最頂部添加一個名為HoverLayer或其他名稱的新CCLayer 這是為了模塊化。
  2. 在任何圖層上觸摸精靈后,立即將其從該圖層中刪除,並將其作為HoverLayer的子項HoverLayer到同一位置。 用戶將不會“看到”任何更改。
  3. 向上觸摸時,拖動精靈后,檢測精靈是否在HUDLayer
  4. HoverLayer移除精靈,然后將其添加到適當的圖層。

筆記:

  • 您可以使用HUDLayer而不是HoverLayer ,但是您的類將很混亂。
  • 當然,如果在拖動時將觸摸的精靈保留在GameLayer上,則它GameLayer會在HUDLayer后面結束,因此必須將精靈移動到頂層。
  • 實現給定解決方案的代碼很簡單。 真的,沒什么特別的。

我將在此處提供一個實現:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM