我正在做一个小应用程序,它是一个记忆游戏,你选择一张卡,它出现,你选择第二张卡,它出现,如果它们是相同的,他们不在游戏中,如果他们不匹配,他们又被拒绝了。
我有public class PlayActivity extends Activity implements OnClickListener
。
翻转事件由点击处理程序触发,在public void onCreate(Bundle savedInstanceState)
处声明它们正常工作。
当选择第一张卡时,它会调用我的方法Action
,这会将图像从默认设置(卡背面)设置为“真实”图像(卡片正面)。好到目前为止。
我的问题是第二张卡:当它被选中时,它调用方法Action
,它应该设置前面的图像(让我们称之为'中间动作'),然后是一个litle暂停(一个while循环什么都不做,直到x毫秒),然后它检查做什么(如果它们匹配与否)并将它们关闭或取出游戏。您可以看到问题出在哪里:屏幕仅显示x毫秒后的结果(“中间动作”未被绘制)。
由于我已经使用XNA完成了一些小游戏,我知道循环Update-Draw,所以我知道我在这里更新同样的东西两次,所以总是绘制最后一个。但在这里,我唯一可以更新的是当点击事件被触发时,我需要定期,不断更新。
帮助?
答案 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);
}
}