1

私はAndroid/Java開発の初心者です。私はプログラミングを学び始めたばかりです。私にとって最も簡単な方法は、オープンソースプロジェクトを変更して、関連する原則を理解することです。

とにかく、私はバブルシュートゲームに非常に簡単な変更を加えたいと思います。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>

元のコードは、SRCフォルダーのGameView.javaの背景を定義します。

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

このアイデアの簡単な方法を作成するのを手伝ってください。

また、私はいくつかの質問があります:

  • xmlファイルはres/valuesに正しい必要がありますか?任意のファイル名を使用できますか?例:random.xml
  • xmlファイルで次のエラーが発生しました:エラー:アイテムには「type」属性が必要ですアイテムごとにタイプとフォーマットを設定する必要がありますか?はいの場合、どのタイプとどのフォーマットをお願いしますか?
  • ビデオメモリの制限を超えないようにすることはできますか?つまり、現在の背景のみをロードし、使用するたびにフラッシュアウトしてから、新しいランダム画像が表示されます。

注:バブルシュートのソースコード: https ://code.google.com/p/bubble-shoot/

背景画像のファイル名:background01.jpg、background02.jpgなど。

どうもありがとうございます、

ポール

4

1 に答える 1

0

文字列配列は数字でインデックス付けされているため、説明していることを実行し、好きな画像を使用するのは本当に簡単です。

ドローアブルフォルダにある名前とまったく同じように名前を入力するように注意していると仮定します。

したがって、配列(名前付きアイテムは必要ありません)は次のようになります。

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

などなど。ドローアブルには、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);

私はこれをメモリから書いているので、タイプミスがあるかもしれませんが、あなたは一般的な考えを理解しています。

于 2013-03-26T08:00:48.967 に答える