【问题标题】:Cycle random images in Android在Android中循环随机图像
【发布时间】:2013-03-26 07:49:46
【问题描述】:

我是 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等

非常感谢,

保罗

【问题讨论】:

  • 这行得通。它随机改变背景。现在我有另一个问题。只有当我重新启动应用程序时它才会改变。当游戏改变关卡(nextLevel)时,我需要应用程序来改变背景。谢谢。

标签: java android xml image random


【解决方案1】:

由于字符串数组是按数字索引的,因此很容易按照您的描述进行操作并使用您喜欢的任何图像。

假设你小心地输入了他们在 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);

我是凭记忆写的,所以可能有错别字,但你大概明白了。

【讨论】:

  • 我的工作代码:TypedArray imgs = getResources().obtainTypedArray(R.array.random_background);随机 rand = new Random(); int rndInt = rand.nextInt(imgs.length()); int resID = imgs.getResourceId(rndInt, 0); mBackgroundOrig = BitmapFactory.decodeResource(res, resID, options);'但只有当我重新启动整个应用程序时它才会改变。我想在级别更改时更改背景。请帮忙。谢谢。
  • 你需要在你的关卡变化时调用这个代码,我想! :)
  • 我该怎么做?你能给我一个使用上面代码的例子吗?我是 Android / Java 的新手。谢谢。
  • 我不知道你是如何开始你的关卡的。无论您在做什么,都应该在此处引入代码。如果您发布您的游戏代码,我可能会查看并告诉您,但我怀疑您真的可以自己解决这个问题。
  • 我想不通。级别管理器代码在这里:code.google.com/p/bubble-shoot/source/browse/trunk/…。我假设 goToNextLevel() 需要调用 rand 背景代码。请告诉我一个例子,如何准确地在这两个代码之间进行调用。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 2017-02-19
相关资源
最近更新 更多