2013-03-26 76 views
1

我是初學Android/Java開發人員。我剛開始學習編程,對我來說最簡單的方法就是修改開源項目來理解所涉及的原則。在Android中循環隨機圖像

不管怎麼說,我希望做一個非常簡單的修改泡泡射擊遊戲,5-10不同的背景圖像將被隨機循環:

  • 當每一個新的水平開始(但保持不變時的水平只是重新啓動)
  • 或更容易:背景正在改變每一次的水平正在重新啓動或啓動

當我定義的背景可繪製的字符串數組:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="random_background"></string-array> 
     <item name="background_01">@drawable/background01</item> 
     <item name="background_02">@drawable/background02</item> 
     <item name="background_03">@drawable/background03</item> 
     <item name="background_04">@drawable/background04</item> 
     <item name="background_05">@drawable/background05</item> 
     <item name="background_06">@drawable/background06</item> 
     <item name="background_07">@drawable/background07</item> 
     <item name="background_08">@drawable/background08</item> 
     <item name="background_09">@drawable/background09</item> 
     <item name="background_10">@drawable/background10</item> 

</resources> 

原代碼定義上GameView.java的背景SRC文件夾:

mBackgroundOrig = 
    BitmapFactory.decodeResource(res, R.drawable.background, options); 

請幫我創建這個想法的簡單方法。

另外我有幾個問題:

  • XML文件必須在RES /值是否正確?我可以使用任何文件名嗎?例如:random.xml
  • 我得到這個錯誤與XML文件:需要項目 A「型」屬性我需要設置每個項目的類型和格式:錯誤?如果是,請填寫什麼類型和格式?
  • 我們可以避免超出視頻內存限制嗎?我的意思是隻加載當前的背景,並且在每次使用之後被清空,然後顯示新的隨機圖像。

注:泡泡射擊源代碼:https://code.google.com/p/bubble-shoot/

背景圖片的文件名:background01.jpg,background02.jpg等

非常感謝你,

Paul

+0

看看這裏:http://stackoverflow.com/questions/15545753/random-genaration-of-image-from-drawable-folder-in-android/15546032#15546032 – 2013-03-26 08:05:50

+0

這工作。它隨機改變背景。現在我有另一個問題。只有當我重新啓動應用程序時纔會更改。當遊戲改變關卡(nextLevel)時,我需要應用程序來改變背景。謝謝。 – 2013-04-02 05:30:10

回答

0

由於字符串數組通過數字索引,所以很容易做你正在描述的內容,並使用你喜歡的任何圖片。

假設你小心地輸入他們的名字,就像他們在drawables文件夾中一樣。

所以你的數組(不需要命名項)看起來像

<string-array name="myImages"> 
    <item>foo</item> 
    <item>bar</item> 
    <item>image7</item> 
    <item>king_kong</item> 
</string-array> 

等等。 Drawables需要包含圖像foo.jpg,bar.jpg等。

現在在你的代碼你拉一個隨機數是0,這個數組的長度,然後之間,你得到你繪製這樣的:

int randomNum = Math.floor(Math.random() * getResources().getStringArray(R.array.myImages).length); 
Field field = R.drawable.class.getField(getResources().getStringArray(R.array.myImages)[randomNum]); 
int imgId = field.getInt(null); 

myImg.setImgResource(imgId); 

我從內存中寫入這一點,所以它可能有錯別字,但你有一般想法。

+0

我的工作代碼: TypedArray imgs = getResources()。obtainTypedArray(R.array.random_background); 隨機rand = new Random(); int rndInt = rand.nextInt(imgs.length()); int resID = imgs.getResourceId(rndInt,0); \t mBackgroundOrig = \t BitmapFactory.decodeResource(res,resID,options);' 但它只在重新啓動整個應用程序時發生變化。當關卡改變時我想改變背景。請幫忙。謝謝。 – 2013-04-02 05:34:25

+0

當你的關卡變化時,你需要調用這段代碼,我想! :) – 2013-04-02 06:11:53

+0

我該怎麼做?你能給我一個例子使用上面的代碼嗎?我是Android/Java的新手。謝謝。 – 2013-04-02 06:41:07