2012-07-27 73 views
0

我开始在android和java上。更改imagebutton的图像

我尽量让西蒙的比赛,但有一些问题。

我写这表明西蒙按键序列或由玩家按下按钮:

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) { 

应该改变每个的ImageButton的图像,播放声音,等待一段时间({})和然后 再次改变图像....

但它不能很好地工作......它播放声音,真正改变图像通过bullet_square_xxx,但眼睛无法看到图像的变化,变化是只有在图像没有被bullet_ball_xxx再次改变时才可见: - (

我觉得这是我的错,因为我写的不是Java不同的代码确实有效...我是一个初学者 和不认为在Java中...我有在我的脑海Visual Basic程序结构呢。

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

+0

纠正了一些拼写。 – 2012-07-28 13:45:29

回答

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) { 
0

确定....我认为延迟是在你的代码的问题。由于现在有高速处理器,可以在几ms内达到10000000,我的工作就是这样。因此,而不是使用旧学校的for循环引入的延迟使用

了Thread.sleep(5000);

这导致5秒的延迟,参数是在毫秒的时间。

+0

我尝试使用thread.sleep()并且图像不会更改。 :-( 也许只能用于图像或FRAMERELAY的背景颜色的西蒙说游戏更好地工作。 – ev3c 2012-07-28 14:04:27

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) { 
+0

这将运行......但图像的变化不是很细...... 我正在考虑使用只有背景颜色(正常或荧光笔)的图像或帧中继...可能是更好的“西蒙说”游戏... – ev3c 2012-07-28 14:06:47