2

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

所以我想使用手势,这是更简单的方法;通过手势生成器,我制作了一些形状并将它们用作模型。问题是,我不能让它与 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();
                 }
           }
     }


}
4

1 回答 1

4

我没有在您的演示代码中看到 AndEngine 部分。您的ProvaGesture活动应该从 AndEgine 的扩展SimpleBaseGameActivityBaseGameActivity实施IOnSceneTouchListener

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

  • 您在 android中一次只运行一个活动。

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

解决方案可能是[建议]:

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

于 2012-08-29T03:17:03.187 回答