我是 Android/Java 开发的初学者。我刚刚开始学习编程,对我来说最简单的方法就是修改开源项目来理解其中涉及的原理。
总之,我想对Bubble Shoot游戏做一个非常简单的修改,随机循环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等
非常感谢,
保罗
最佳答案
由于字符串数组是按数字索引的,因此很容易执行您所描述的操作并使用您喜欢的任何图像。
假设您仔细地输入了它们的名称,与它们在可绘制文件夹中的名称完全相同。
所以你的数组(不需要命名项目)看起来像
<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);
我是凭内存写的,所以可能有错别字,但你大概明白了。
关于java - Android 中循环随机图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631904/