【问题标题】:android Andengine surfaceGestureDetectorandroid Andengine SurfaceGestureDetector
【发布时间】:2013-03-03 08:40:23
【问题描述】:

我尝试使用 SurfaceGestureDetector 这个类只使用 SurfaceGestureDetector 并且不起作用。 i a msg "03-14 20:40:47.746: I/AndEngine(8963): org.anddev.andengine.input.touch.TouchEvent$TouchEventPool 已用尽,还有 0 个项目尚未回收。已分配 1 个。”仅标记 Log.d("test", "TouchEvent");工作

public class MainActivity extends BaseGameActivity {
// ===========================================================
// Constants
// ===========================================================

private static final int CAMERA_WIDTH = 480;
private static final int CAMERA_HEIGHT = 320;

// ===========================================================
// Fields
// ===========================================================

private Camera mCamera;
//private Texture mTexture, mBatTexture;
//private TiledTextureRegion mBatTextureRegion;
//private TextureRegion mSplashTextureRegion;
private Handler mHandler;
//static protected Music mMusic;


private Scene mScene;

private SurfaceGestureDetector surfaceGestureDetector;

private TouchEvent pSceneTouchEvent;

// ===========================================================
// Constructors
// ===========================================================

// ===========================================================
// Getter & Setter
// ===========================================================

// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================

@Override
public Engine onLoadEngine() {
    mHandler = new Handler();
    this.mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

    return new Engine(new EngineOptions(true, ScreenOrientation.LANDSCAPE, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), this.mCamera));
}

@Override
public void onLoadResources() {

    }

@Override
public Scene onLoadScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());

    this.mScene = new Scene();

    setupGestureDetaction();

    return mScene;
}

@Override
public void onLoadComplete() {
    //mHandler.post(mLaunchTask);
}

private Runnable mLaunchTask = new Runnable() {
    public void run() {
        Intent myIntent = new Intent(MainActivity.this, TMXTiledMapExample.class);
        MainActivity.this.startActivity(myIntent);
    }
 };


private void setupGestureDetaction(){



      surfaceGestureDetector = new SurfaceGestureDetector(1f) {         

        @Override
        protected boolean onSingleTap() {
            // TODO Auto-generated method stub
            Log.d("test", "onSingleTap"); 
            return true;
        }

        @Override
        protected boolean onDoubleTap() {
            Log.d("test", "onDoubleTap");
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        protected boolean onSwipeUp() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        protected boolean onSwipeDown() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        protected boolean onSwipeLeft() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        protected boolean onSwipeRight() {
            // TODO Auto-generated method stub
            return false;
        }



   @Override
       public boolean onManagedTouchEvent(TouchEvent pSceneTouchEvent) { 
        return super.onManagedTouchEvent(pSceneTouchEvent);
       }

       @Override
       public boolean onSceneTouchEvent(Scene pScene,
         TouchEvent pSceneTouchEvent) {     
           Log.d("test", "TouchEvent");

        return super.onSceneTouchEvent(pScene, pSceneTouchEvent);
       //return false;

       }
      };

 //      if (pSceneTouchEvent!=null){
     // TouchEvent.recycle(pSceneTouchEvent);}


      surfaceGestureDetector.setEnabled(true);

      mScene.setOnSceneTouchListener(surfaceGestureDetector);
    }



// ===========================================================
// Methods
// ===========================================================

// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}

【问题讨论】:

  • 我试试这个并工作:androidsnippets.com/… 但我需要 onDoubleTap() 它似乎返回 super.onSceneTouchEvent(pScene, pSceneTouchEvent);不正确我从昨天开始搜索好的代码...
  • 我在这里修复了双击 stackoverflow.com/questions/2640119/… 但我仍然无法运行 surfaceGestureDetector

标签: android andengine


【解决方案1】:

当我写这个回复时,这个问题已经很老了,但是您在上面显示的日志消息不是错误消息。这是一条适当的消息,让您知道触摸事件的对象池不包含任何触摸,因此它创建了更多。

这是来自 Andengine 的正常消息,当您第一次开始使用触控时会看到它,但随着应用程序的运行而减少,因为池大小会增长,因此触控将被回收而不是创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2016-07-15
    相关资源
    最近更新 更多