Ответ 1
Есть ли причина, по которой вам нужно загружать текстуры во время выполнения? Обычным способом является загрузка необходимых текстур на один атлас при загрузке приложения, чтобы затем вы могли быстро их использовать позже.
Что касается повторного использования кода, идея Todilo об перечислениях, похоже, в значительной степени зависит от того, что вам нужно. Скажем, например, что у вас есть два типа объектов - объекты, которые исчезают, когда вы касаетесь их и объекты, которые взлетают, когда вы касаетесь их. Вы перечисляете обе категории и помещаете фрагмент кода в код обработки событий касания, который проверяет, должен ли объект исчезать или летать.
Если вы не знаете, что объекты должны делать при касании перед запуском приложения, существует более динамичный способ достижения такого же результата. Просто создайте два списка во время выполнения и поместите ссылку на объект в один из списков в соответствии с тем, что должен делать объект при касании. Затем в обработке событий касания сделайте что-то вроде этого:
if (disappearList.contains(touchedObject)) {
disappear(object)
}
if (flyUpList.contains(touchedObject)) {
flyUp(object)
}
Слишком плохо AndEngine не позволяет пользователям устанавливать слушателей на спрайты, это упростит ситуацию.
EDIT: Добавлено объяснение использования BlackPawnTextureBuilder: Ваш атлас должен быть типа BuildableBitmapTextureAtlas, тогда вы добавляете все текстуры, подобные этому
BitmapTextureAtlasTextureRegionFactory.createFromAsset(buildableAtlas, this, "image.png"));
и после этого
try {
this.buildableAtlas.build(new BlackPawnTextureBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(1));
} catch (final TextureAtlasSourcePackingException e) {
Debug.e(e);
}
Я не знаю, будет ли это работать для анимированных спрайтов или нет, вам придется попробовать. Кроме того, нет переопределения onTouch, вам придется сделать это в методе onAreaTouched. Одним из примеров такого условия является
if (pSceneMotionEvent.getAction() == MotionEvent.ACTION_DOWN && disappearList.contains(pTouchArea)) {disappear();}