Мне нужно добавить событие касания в некоторые классы, которые расширяют класс Entity, но, похоже, это не работает.
Выполнение этого для Sprites, AnimatedSprites и примитивов работает как шарм, просто делая что-то вроде:
Sprite s = new Sprite(...){
public boolean onAreaTouched(...){
...
return true;
}
}
registerTouchArea(s);
Но это не работает при применении к сущности или классу, расширяющему Entity.
Знаете, что нужно делать в этом случае? Возможно ли вообще использовать onAreaTouched в классе Entity? Если нет, что можно было бы обойти?
Пожалуйста помоги
Ответ 1 · Shihab Uddin
Это очень просто. Следуйте приведенному ниже коду
Создайте пример объекта. Код является самоописательным.
public class Example extends Entity implements IOnAreaTouchListener {
public Rectangle aSprite;
public Example(float pX, float pY,
VertexBufferObjectManager pVertexBufferObjectManager) {
// initialize your sprite & it's touch implementation
aSprite = new Rectangle(pX, pY, 40, 40, pVertexBufferObjectManager) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (pSceneTouchEvent.isActionUp()) {
Log.e("Rectangle aSprite", "isActionUp");
return true;
}
return false;
}
};
}
@Override
public void onAttached() {
super.onAttached();
}
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
ITouchArea pTouchArea, float pTouchAreaLocalX,
float pTouchAreaLocalY) {
aSprite.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX,
pTouchAreaLocalY);
return false;
}
}
В вашем классе Custom Scene или в вашем onCreateScene() напишите так
Example example = new Example(80, 80, getVertexBufferObjectManager());
mCurrentScene.attachChild(example.aSprite);
mCurrentScene.registerTouchArea(example.aSprite);