2012-07-27 78 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