2012-04-07 50 views
-1

我正在尝试做一个onTouchEvent来创建一个导弹,这个导弹会从我的角色精灵中向前推进。 我使用Android导弹精灵

 if (missdraw = true){ 
      canvas.drawBitmap(missile,missilex,missileY,null); 
      missilex = missilex + 14; 
      missdraw = false; 
     } 
在我的onDraw方法

这个工作,但问题是这只会造成一次一个。 我试着创建一个类来处理这个问题,但是这只是导致一个错误,当我尝试着火时崩溃。 以下是我使用的类:(这是在OnDraw中我gameview)

 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

实际上,你的概念很不错。有几件事我不太了解你发布的代码示例,我会试着翻译成我会做的事情,你可以告诉我,如果我做错了:)

in你的游戏类,你需要(和它看起来像你)导弹的列表:

LinkedList<Batcher> missiles; 

在你onTouch(),但导弹创建 -

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

你现在有导弹的集合。请注意,我没有在批处理器的构造函数中包含该列表,因为对象应该永远不需要知道它是集合的一部分。所有它需要知道的是如何绘制自己和在哪里。因为我认为所有的导弹都会频繁地添加到屏幕上或从屏幕上删除,而我一次只能在屏幕上显示一些导弹,所以我使用了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); 
    } 
} 

希望这会为你做,但随时让我知道,如果有什么你想我更多地解释!

+0

谢谢你的帮助,我已经得到它的工作了(以及列表阵列正在制造多枚导弹)现在的问题是它试图删除时,如果屏幕上有多个导弹,它会崩溃。对于迟到的答复也很抱歉,因为单纯的工作陷入困境,所以暂时搁置。 – Phil 2012-05-26 15:01:54