实现Bitmap Game对象的多个实例

时间:2012-02-17 21:18:29

标签: android random bitmap android-canvas

我是Android开发的初学者。

我创造了一款游戏。一个位图(1)是可控的,另一个位图(2)与第一个位图相互作用。工作良好。题 ;我将如何创建(2)的多个实例,这些实例首先会以相同的方式响应与(1)的碰撞。

到目前为止我已经建立了什么;

在MainGamePanel中,我创建了两个位图:

  basket = new basket(BitmapFactory.decodeResource(getResources(), R.drawable.basket01), 50, 50);
  apple = new apple(BitmapFactory.decodeResource(getResources(), R.drawable.apple_red01));

MainThread执行更新并在面板上绘制画布

在更新中(在MainGamePanel中),我检查(1)和(2)之间的碰撞,检查坐标。

如果检测到碰撞,我在apple(2)上设置坐标,它变为'slotted'。

然后,如果插入并触摸了apple(2),我将其移动到屏幕上的随机位置,并将boolean slotted设置为false。

...这就是我被困的地方,2个问题(我应该把它们分开来吗?)

  1. 如何创建位图的多个实例(2)?
  2. 如何获取画布的X和Y max值,或者未在类本身中创建的视图?
  3. 谢谢!

    位图的当前代码片段(2)“apple”:

         public void draw(Canvas canvas) {
      canvas.drawBitmap(bitmap, X - width/2, Y - height/2, null);
     }
    

    关于问题二(审查随机生成器,我需要设置最大值);

        if (slotted){
         if (eventX >= (X - width/ 2) && (eventX <= (X + width/2))) {
               if (eventY >= (Y - height/ 2) && (eventY <= (Y + height/ 2))) {
        // basket touch
        Random Rnd = new Random();
    
        float nX=Rnd.nextInt(HOWTOMAXOFVIEWORCANVAS);
        float nY=Rnd.nextInt(HOWTOMAXOFVIEWORCANVAS)+80; 
    
    // the +80 is to prevent the apple from returning in the 'slotted' area (the basket can't get there ;)
    
        setX(nX);
        setY(nY);
        slotted = false;
    

1 个答案:

答案 0 :(得分:1)

一种非常简单的方法是创建一个list个苹果而不是单独的苹果实例:

ArrayList<apple> appleList = new ArrayList<apple>();
int nApples = 5;
for (int i=0; i<5; i++)
      appleList.add(new apple();

不想想要创建位图的多个实例。位图可以消耗每个像素4个字节的大量内存。简单地创建一次位图然后让你的苹果对象直接引用该位图会好很多倍。

画布的最大X和Y值由您要绘制的View的尺寸决定。在View充气和绘制后,您应该能够从视图中获取这些值。