0

我开始使用android和java。

我尝试制作一个 simon 游戏,但遇到了一些问题。

我写这个是为了显示 simon 按钮序列或玩家按下的按钮:

    if (but_num == 1) {
        ib1.setImageResource(R.drawable.bullet_square_green);
        MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
        sound.start();
        for (int x = 1; x < 10000000; x++) { };
        ib1.setImageResource(R.drawable.bullet_ball_green);
    } else if (but_num == 2) {

它应该更改每个图像按钮的图像,播放声音,等待一段时间(对于 {}),然后再次更改图像....

但是效果不好...它播放声音并确实通过bullet_square_xxx改变了图像,但是眼睛看不到图像的变化,只有在没有再次被bullet_ball_xxx改回图像的情况下才能看到变化: -(

我认为这是我的错,因为我编写的代码与 java 不同的代码确实有效……我是初学者,不会用 java 思考……我脑子里已经有了可视化的基本程序结构。

谢谢你,对不起我的英语!

4

3 回答 3

0

还有另一个线程谈论引入延迟: How to pause / sleep thread or process in Android?

你可以试试这个[我已经从那个线程复制粘贴]:

 if (but_num == 1) {
    ib1.setImageResource(R.drawable.bullet_square_green);
    MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
    sound.start();

    // SLEEP 2 SECONDS HERE ...
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
     public void run() { 
         ib1.setImageResource(R.drawable.bullet_ball_green);
     } 
}, 2000);


} else if (but_num == 2) {
于 2012-07-28T05:40:15.143 回答
0

这可能是由于事件调度线程的延迟以及空循环甚至可能被编译器忽略的事实,因为它是静态的,很容易预测它对程序没有影响。我的建议是首先在 GUI 上强制重新绘制/更新并使用 Thread.sleep。像这样的东西:

if (but_num == 1) {
    ib1.setImageResource(R.drawable.bullet_square_green);
    updateUI(); // if you are somewhere in a class extending any Frame/Panel
    //If you are in other class use mainFrame.repaint(); 
    MediaPlayer sound = MediaPlayer.create(this, R.raw.tone_green);
    sound.start();
    try{
        Trhead.sleep(3000);
    } catch (InterruptedException e) {}
    ib1.setImageResource(R.drawable.bullet_ball_green);
    updateUI(); //only if this effect is delayed too
} else if (but_num == 2) {
于 2012-07-27T23:27:49.220 回答
0

好的....我认为延迟是您代码中的问题。由于现在有可用的高速处理器可以在几毫秒内计数到 10000000,我的确实如此。因此,不要使用老式的 for 循环来引入延迟使用

线程.sleep(5000);

这会导致 5 秒的延迟,参数是以毫秒为单位的时间。

于 2012-07-27T23:31:57.653 回答