我正在尝试创建一个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);
}
我会感激任何帮助,但如果你能解释它是如何工作的,而不仅仅是代码,因为我对编程很新,而且真的需要理解我在做什么以及为什么我这样做,而不仅仅是复制人们的代码,因为它的工作原理。
干杯菲尔。
答案 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);
}
}
希望你会为你做这件事,但如果你有什么想让我解释的话,请随时告诉我!