0

我正在使用 AndEngine 开发我的游戏,但我认为这个问题与 AndEngine 无关。

如果出现以下情况,我有两个可能的对话框:

  1. 用户在不正确的区域触地或
  2. 用户从不正确的区域抬起。

不幸的是,如果用户在不正确的区域触地,当他们抬起时,他们也满足错误 2——从错误的区域抬起。

简而言之,这是我的代码:

public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
   float y = pSceneTouchEvent.getY();
   int dialog_count = 0;

   if (pSceneTouchEvent.isActionDown() && y < 1000) {
     activity.runOnUiThread(new Runnable() {
       @Override
       public void run() {
         AlertDialog Code
         ..............
     }
    }
    dialog_count ++;
    Log.d("Dialog Count", "Count is " + dialog_count);
   } else if (dialog_count < 1 && pSceneTouchEvent.isActionUp() && y > 105) {
    Log.d("Dialog Count", "Count is still " + dialog_count);
    activity.runOnUiThread(new Runnable() {
       @Override
       public void run() {
       Second AlertDialog Code
       .................
   }
  }
 }
  return false;
 }

现在,我的第一个日志dialog_count显示的值为 1。但是,当我抬起第二个日志时,显示的值为 0。不知何故,这个值要么被重置,要么我的 Else 语句看不到更新的值,dialog_count因为我得到了第二个对话框弹出我的第一个对话框。

有任何想法吗?

4

3 回答 3

3

您的代码初始化

int dialog_count = 0;

每次运行。

要保留上次看到的值,请dialog_count在类中创建一个实例变量。

请注意,您将看到两个事件,一个是“down”,一个是“up”。

于 2013-08-14T04:55:13.617 回答
0

如果你只想显示一个,那么你需要使用一个标志来检查用户是否已经触摸,然后如果你不想显示触摸对话框,只需从标志中检查。但 Touch down 将始终跟随 Touch Up。如果您想在用户移动一点时显示对话框,您可以使用 Touch Move 方法。

于 2013-08-14T04:56:41.000 回答
-1

如果我理解正确,您正在尝试做什么

  1. dialogCount 是函数本地(垃圾收集,退出方法后)。因此,每次新运行该方法时它将为 0。(使其成为私有类变量)。
  2. 如果您在多个线程中引用您的 dialogCount,则 dialogCount 必须是线程安全的,因此请使用并发原语 - AtomicInteger
于 2013-08-14T04:58:01.327 回答