我正在编写一个使用andengine来布局房间表示的应用程序。我试图通过画一条线并允许用户旋转并将线移动到位来绘制墙。我可以画线并给线一个onAreaTouch监听器。我使用
注册了onAreaTouchscene.registerTouchArea(line);
当我运行应用程序时,我能够画线。当我去抓住该行并移动它时,应用程序崩溃并提供一个MethodNotSupportedException,如下所示
Logcat错误:
04-16 10:51:41.584: E/AndroidRuntime(5048): FATAL EXCEPTION: UpdateThread
04-16 10:51:41.584: E/AndroidRuntime(5048): org.andengine.util.exception.MethodNotSupportedException
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.entity.primitive.Line.contains(Line.java:242)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.entity.scene.Scene.onSceneTouchEvent(Scene.java:371)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.engine.Engine.onTouchScene(Engine.java:452)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.engine.Engine.onTouchEvent(Engine.java:438)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.input.touch.controller.BaseTouchController$TouchEventRunnablePoolItem.run(BaseTouchController.java:102)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:54)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.util.adt.pool.RunnablePoolUpdateHandler.onHandlePoolItem(RunnablePoolUpdateHandler.java:1)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.util.adt.pool.PoolUpdateHandler.onUpdate(PoolUpdateHandler.java:88)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.input.touch.controller.BaseTouchController.onUpdate(BaseTouchController.java:62)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.engine.Engine.onUpdate(Engine.java:584)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.engine.Engine.onTickUpdate(Engine.java:548)
04-16 10:51:41.584: E/AndroidRuntime(5048): at org.andengine.engine.Engine$UpdateThread.run(Engine.java:820)
在下面的代码中,当我触摸该行时,我应该得到“Line Touched !!!!”,但是我收到了MethodNotSupportedException错误。
我的代码
@Override
public boolean onSceneTouchEvent(final Scene pScene,
final TouchEvent pSceneTouchEvent) {
switch (pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
prevX = pSceneTouchEvent.getX();
prevY = pSceneTouchEvent.getY();
break;
case TouchEvent.ACTION_MOVE:
currentX = pSceneTouchEvent.getX();
currentY = pSceneTouchEvent.getY();
break;
case TouchEvent.ACTION_UP:
Line line = new Line(prevX, prevY, currentX, currentY, WALL_WIDTH,
getVertexBufferObjectManager()) {
boolean mWallGrabbed = false;
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX, float pTouchAreaLocalY) {
Log.i(TAG, "Line Touched!!!!");
return true;
}
};
mScene.registerTouchArea(line);
mScene.attachChild(line);
break;
default:
break;
}
return true;
}
我已经在网上寻找解决方案,但似乎以前没有人这样做过。我找不到任何可以解决这个问题的东西。如果有解决方案,请告诉我。如果没有解决方案,有更好的方法来实现这个目标吗?