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 文件出现此错误:错误:项目需要“类型”属性我需要为每个项目设置类型和格式吗?如果是,请问是什么类型和格式?
  • 我们可以避免超过显存限制吗?我的意思是只加载当前的背景,每次使用后都要刷新,然后才会显示一个新的随机图像。

注:泡泡射击源码: https ://code.google.com/p/bubble-shoot/

背景图片文件名:background01.jpg、background02.jpg等。

非常感谢,

保罗

4

1 回答 1

0

由于字符串数组是由数字索引的,所以很容易做你所描述的事情并使用你喜欢的任何图像。

假设您小心地输入它们的名称,就像它们在 drawables 文件夹中一样。

所以你的数组(不需要命名项目)看起来像

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

等等。Drawable 需要包含图像 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 回答