【问题标题】:Implement multiple instances of Bitmap Game object实现位图游戏对象的多个实例
【发布时间】:2012-02-17 21:18:28
【问题描述】:

我是 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) 之间的碰撞,检查坐标。

如果检测到碰撞,我在苹果 (2) 上设置坐标,它变成“开槽”。

然后,如果苹果 (2) 被开槽并触摸,我将它移动到屏幕上的随机位置并将开槽布尔值设置为 false。

...这是我卡住的地方,2 个问题(我应该把它们分开吗?)

  1. 如何创建位图的多个实例 (2)?
  2. 如何获取画布的 X 和 Y 最大值,或者不是在类本身中创建的视图?

谢谢!

位图的当前 Code-sn-ps (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;

【问题讨论】:

    标签: android random bitmap android-canvas


    【解决方案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 被膨胀和绘制,您应该能够从视图中获取这些值。

    【讨论】:

    • 关于视图大小;我试过添加 public int sizeY = getHeight();到 MainGamePanel(扩展 SurfaceView)。但是,当我从苹果类调用 MainGamePanel.sizeY 时,我收到有关静态和非静态引用的错误。 getDefaultSize 方法似乎也没有多大帮助。您能否详细说明如何在不同的类中实现 SurfaceView 的尺寸?
    • 感谢您的回答,我解决了我的问题 2。在 MainGamePanel 中,我创建了一个公共静态 int 宽度.. 后来,当我确定画布已绘制时,我将其填充为:width =获取宽度();。然后,我可以从另一个类中访问 MainGamePanel.width!谢谢!
    • 感谢您的回答,我解决了我的问题 1。我使用 'for (int i = 0; i
    • Slayton,多亏了你的回答,我才能写出play.google.com/store/apps/details?id=happyworx.nl.Applez。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多