手势识别器和AndEngine(Android)

时间:2012-08-25 21:55:45

标签: android view andengine gesture

在我正在开发的游戏中,我需要这个功能:能够在屏幕上绘图并确定绘图是否是确定的形状(假设是矩形,三角形或其他)。

所以我想使用手势,这是更简单的方法;我用手势构建器制作了一些形状,并将它们用作模型。问题是,我无法使用AndEngine。

我需要GestureOverlayView,它基本上是绘图板,放置在游戏场景的顶部,以便我可以看到场景本身附加了所有实体,我也可以绘制手势。

现在我尝试的东西不起作用,AndEngine的东西都显示在屏幕上,或者是GestureOverlayView,而不是两者。

我是Android开发者和AndEngine的新手,所以我有点卡在这里......你有什么想法我怎么能让它起作用?我到处看,但找不到任何有用的东西......

我将把手势部分的代码保留在下面,例如,如果你在项目的路径res / raw中没有任何预制手势,它就不会真正起作用:

public class ProvaGesture extends Activity implements GestureOverlayView.OnGesturePerformedListener        
{

     private GestureLibrary gestureLib;

     public  GestureOverlayView gestureOverlayView;


     @Override
     public void onCreate(Bundle savedInstanceState) 
     {
          super.onCreate(savedInstanceState);

          gestureOverlayView = new GestureOverlayView(this);

          gestureOverlayView.addOnGesturePerformedListener(this);

          gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);

          if (!gestureLib.load())
          {
                finish();
          }

           setContentView(gestureOverlayView);
      }


     public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture)
     {
           ArrayList<Prediction> predictions = gestureLib.recognize(gesture);

           for (Prediction prediction : predictions) 
           {
                 if (prediction.score > 1.0) 
                 {
                        Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
                 }
           }
     }


}

1 个答案:

答案 0 :(得分:4)

我没有看到AndEngine参与您的演示代码。您的ProvaGesture活动应该从AndEgine的SimpleBaseGameActivityBaseGameActivity扩展,然后实施IOnSceneTouchListener

根据您的想法,我猜测您尝试创建一个仅处理手势的独立叠加视图,因此您必须考虑:

  • 您在Android中只有一次运行的活动。

  • 如果您要创建一个覆盖AndEgine表面视图的用户定义视图,您应该看到Andengine的示例:XMLLayoutExample

解决方案可能 [建议]:

public class OverlapLayoutExample extends SimpleLayoutGameActivity {
@Override
protected int getLayoutID() {
    //your layout id (xml file in layout folder)
    return R.layout.overlaplayout;
}

@Override
protected int getRenderSurfaceViewID() 
{
    //overlaplayout will contain a SurfaceView with following ID
    //this surface is where you render Andgine
    return R.id.overlaplayout_rendersurfaceview;
}
}

不要忘记创建自己的布局:overlaplayout包含surfaceViewOverlayView