2012-10-18 40 views
2

我正在使用AndEngine開發Android應用程序。我有一個可拖動對象的遊戲場景。當一個對象被拖動時,我希望所有其他對象的觸摸區域未註冊,因此它們不會發生干擾,並且當拖動操作完成時 - 重新註冊所有觸摸區域。AndEngine - 取消註冊,然後註冊所有場景的觸摸區域

我試圖嘗試這種在拖動開始這樣做:

 touchAreas = gameScene.getTouchAreas(); 

    try { 
     gameScene.detachChild(towerDragSprite); 
     gameScene.detachChild(rangeDragSprite); 
     gameScene.unregisterTouchArea(rangeDragSprite); 
     for (int i = 0; i < touchAreas.size(); i++) 
      gameScene.unregisterTouchArea(touchAreas.get(i)); 
    } catch (IllegalStateException e) { 
    } 

,這當拖動完成:

if (!pSceneTouchEvent.isActionMove()) { 
       . 
       . 
       . 
       try { 
        for (int i = 0; i < touchAreas.size(); i++) 
         gameScene.registerTouchArea(touchAreas.get(i)); 
       } catch (Exception e) {} 
       return true; 
      } 

但我發現了一個OutOfMemory例外時拖拽完成(即使觸摸區域不多)。

我見過AndEngine中的場景也有scene.unregisterTouchAreas(ITouchAreaMathcer pTouchAreaMatcher)方法,但我不知道如何獲得ITouchAreaMatcher,並且無法在Internet上找到解決方案。

任何人都知道該怎麼辦?

感謝

+1

ITouchAreaMatcher很容易製作,只需創建一個匿名內部類並定義匹配是什麼。我用它來註銷一切,所以我只是讓該方法每次都返回true。如果您使用的是Eclipse,只需在參數中寫入「new」,然後按Ctrl +空格並選擇正確的界面。 Eclipse會爲你填充語法糖。 – JohnEye

+0

謝謝,這工作在註銷所有觸摸區域!但是現在我該如何重新註冊它們?我嘗試使用'scene.getTouchAreas()'在'ArrayList'中捕獲所有觸摸區域,然後在拖動動作結束時在for循環中循環'scene.registerTouchArea(touchAreas.get(i))',但它沒有'不要做任何事情。我會繼續嘗試其他方法,但是我有一個簡單的解決方案嗎? – LoneDuck

+0

我只是通過for循環中的所有孩子,並調用mScene.registerTouchArea(((ITouchArea)mScene.getChild(i));在做這件事的時候,我會檢查正在註冊的孩子是否是我真正想要註冊的孩子。 – JohnEye

回答

1

退房在AndEngineExamples要麼MultiTouchExample.javaTouchDragExample.java。這些都會觸摸和拖動。多點觸控顯然是多點觸控,但也有其他實體,如果將當前觸控拖動到其上,則不會受到其他實體的困擾。也許這會幫助你?

如果您還不知道,可以使用this app來嘗試這些示例。

對了...只是踢,你有沒有試過

​​

從你的文章來看,我認爲你讓這種方式比它更難。你試圖做的是一個應該很容易處理引擎的常見功能。