2013-03-26 51 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