如何进行更新循环?

时间:2011-06-25 03:07:05

标签: android

我正在做一个小应用程序,它是一个记忆游戏,你选择一张卡,它出现,你选择第二张卡,它出现,如果它们是相同的,他们不在游戏中,如果他们不匹配,他们又被拒绝了。

我有 public class PlayActivity extends Activity implements OnClickListener。 翻转事件由点击处理程序触发,在public void onCreate(Bundle savedInstanceState)处声明它们正常工作。

当选择第一张卡时,它会调用我的方法Action,这会将图像从默认设置(卡背面)设置为“真实”图像(卡片正面)。好到目前为止。 我的问题是第二张卡:当它被选中时,它调用方法Action,它应该设置前面的图像(让我们称之为'中间动作'),然后是一个litle暂停(一个while循环什么都不做,直到x毫秒),然后它检查做什么(如果它们匹配与否)并将它们关闭或取出游戏。您可以看到问题出在哪里:屏幕仅显示x毫秒后的结果(“中间动作”未被绘制)。

由于我已经使用XNA完成了一些小游戏,我知道循环Update-Draw,所以我知道我在这里更新同样的东西两次,所以总是绘制最后一个。但在这里,我唯一可以更新的是当点击事件被触发时,我需要定期,不断更新。

帮助?

1 个答案:

答案 0 :(得分:0)

您可以使用TimerTask来处理它。您可以像下面这样实现它。

这可能不是最强有力的方法,但这是一个想法。如果我想出一个更好的方法在短时间内完成它我会编辑我的帖子。 :)

另外我想补充一点,如果你想制作一个使用更新/绘制循环的游戏,你可能需要使用SurfaceView来绘制你的游戏。请查看此处的示例http://developer.android.com/resources/samples/JetBoy/index.html

public class TestGameActivity extends Activity {

    /* UIHandler prevents exceptions from
     performing UI logic on a non-UI thread */
    private static final int MESSAGE_HIDE_CARD = 0;

    private class UIHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case MESSAGE_HIDE_CARD:
                ImageView cardView = (ImageView) msg.obj;
                cardView.setImageResource(R.drawable.faceDownCard);
                break;
            }
        }
    }
    private UIHandler handler = new UIHandler();

    // Handle my click. V is the card view
    public void onClick(View v) {

        final int viewID = v.getId();
        // Create a hide task
        TimerTask hideTask = new TimerTask() {

            @Override
            public void run() {
                // Construct a message so you won't get an exception
                Message msg = new Message();
                msg.what = MESSAGE_HIDE_CARD;
                msg.obj = findViewById(viewID);
                handler.sendMessage(msg);
            }
        };
        // Schedule the task for 2 seconds
        new Timer().schedule(hideTask, 2000);
    }

}