Android导弹精灵

时间:2012-04-07 15:20:13

标签: java android android-canvas sprite

我正在尝试创建一个onTouchEvent来创建一个将从我的角色精灵和前锋发射的导弹。 我有这个工作

        if (missdraw = true){
            canvas.drawBitmap(missile,missilex,missileY,null);
            missilex = missilex + 14;
            missdraw = false;
        }

在我的onDraw方法中,但问题是它一次只能创建一个。 我试图创建一个类来处理这个,但这只会导致错误并在我尝试触发时崩溃。 这是我在课堂上使用的内容:(这是我在游戏视图中的提取)

        for (Batcher missile : missiles ){
            missile.onDraw(canvas);
        }

这是在班级

public Batcher(List<Batcher> temps, ScreenActivity newView, float x,
        float y, Bitmap missile){

    this.x = 1;
    this.y = 2;
    this.missile = missile;

}

public void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    canvas.drawBitmap(missile, x,y, null);

}

我会感激任何帮助,但如果你能解释它是如何工作的,而不仅仅是代码,因为我对编程很新,而且真的需要理解我在做什么以及为什么我这样做,而不仅仅是复制人们的代码,因为它的工作原理。

干杯菲尔。

1 个答案:

答案 0 :(得分:1)

实际上,你的概念非常好。有一些我不太了解你发布的代码示例,我会尝试翻译成我要做的事情,如果我做错了你可以告诉我:)

在你需要的游戏类中(看起来你有)导弹列表:

LinkedList<Batcher> missiles;

onTouch()中,无论如何创建导弹 -

missiles.add(new Batcher(missilex, missiley, missile));
你现在有一批导弹。请注意,我没有将列表包含在您的batcher的构造函数中,因为对象永远不需要知道它是集合的一部分。它需要知道的是如何绘制自己和在哪里。由于我假设你的所有导弹都经常被添加到屏幕上或从屏幕上移除,而一次只有几个屏幕,我使用了一个LinkedList,它可以快速添加和删除,但访问速度很慢特定导弹。如果您需要访问集合中的特定项目并且集合没有太大变化,那么您将使用ArrayList。在onDraw上 - 正如你所拥有的那样,导弹自行完成,这很好,但我更愿意让视图进行绘图,导弹告诉它应该在哪里绘制 -

for (Batcher missile : missiles ){
  missile.setX(missile.getX() + 14); // to make it move
  if (missile.getX() > canvas.gedWidth()) { //check if it's left the screen
    missiles.remove(missile); // Remove it
  }
  else { //perform drawing
    canvas.drawBitmap(missile.getBitmap(), missile.getX(), missile.getY(), null);
  }
}

希望你会为你做这件事,但如果你有什么想让我解释的话,请随时告诉我!