我正在使用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上找到解決方案。
任何人都知道該怎麼辦?
感謝
ITouchAreaMatcher很容易製作,只需創建一個匿名內部類並定義匹配是什麼。我用它來註銷一切,所以我只是讓該方法每次都返回true。如果您使用的是Eclipse,只需在參數中寫入「new」,然後按Ctrl +空格並選擇正確的界面。 Eclipse會爲你填充語法糖。 – JohnEye
謝謝,這工作在註銷所有觸摸區域!但是現在我該如何重新註冊它們?我嘗試使用'scene.getTouchAreas()'在'ArrayList'中捕獲所有觸摸區域,然後在拖動動作結束時在for循環中循環'scene.registerTouchArea(touchAreas.get(i))',但它沒有'不要做任何事情。我會繼續嘗試其他方法,但是我有一個簡單的解決方案嗎? – LoneDuck
我只是通過for循環中的所有孩子,並調用mScene.registerTouchArea(((ITouchArea)mScene.getChild(i));在做這件事的時候,我會檢查正在註冊的孩子是否是我真正想要註冊的孩子。 – JohnEye