-1

我正在尝试制作一个 onTouchEvent 来创建一个从我的角色精灵发射并向前发射的导弹。我有这个工作使用

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

在我的 onDraw 方法中,但问题是它一次只会创建一个。我试图创建一个类来处理这个问题,但这只会在我尝试触发时导致错误和崩溃。这是我在课堂上使用的:(这是在我的游戏视图中的 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);

}

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

干杯菲尔。

4

1 回答 1

1

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

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

LinkedList<Batcher> missiles;

然而,在你onTouch()的身上制造了一枚导弹——

missiles.add(new Batcher(missilex, missiley, missile));

你现在有一个导弹集合。请注意,我没有在批处理器的构造函数中包含列表,因为对象永远不需要知道它是集合的一部分。它只需要知道如何绘制自己以及在哪里绘制。因为我假设你所有的导弹都会频繁地添加到屏幕上或从屏幕上移除,而一次只有几个在屏幕上,所以我使用了 LinkedList,它的添加和移除速度很快,但访问速度很慢特定导弹。如果您需要访问集合中的特定项目并且集合没有太大变化,则可以使用 ArrayList 代替。继续 onDraw - 当你拥有它时,导弹会自行绘制,这很好,但我更喜欢让 View 进行绘图,导弹告诉它应该在哪里绘制 -

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);
  }
}

希望这对你有用,但如果你有什么想让我解释的,请随时告诉我!

于 2012-04-07T16:11:35.067 回答