我想开发一款能够在画布的每一次触摸上射击子弹的游戏。 它可以工作,但是当我在拍摄后触摸画布时,他会接受子弹并重新开始拍摄。 我只想让位图在每次触摸时创建新的子弹。这是我的代码:
public class MainActivity extends Activity implements OnTouchListener {
DrawBall d;
int x ;
int y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
d = new DrawBall(this);
d.setOnTouchListener(this);
setContentView(d);
}
public class DrawBall extends View {
Bitmap alien;
public DrawBall(Context context) {
super(context);
alien = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
startDraw(canvas);
}
public void startDraw(Canvas canvas){
Rect ourRect = new Rect();
ourRect.set(0,0, canvas.getWidth(), canvas.getHeight());
Paint blue = new Paint();
blue.setColor(Color.BLACK);
blue.setStyle(Paint.Style.FILL);
canvas.drawRect(ourRect, blue);
if(y < canvas.getHeight()){
y-=5;
}
canvas.drawBitmap(alien, x, y,new Paint());
invalidate();
}
}
public boolean onTouch(View v, MotionEvent event) {
x = (int) event.getX();
y = (int) event.getY();
return false;
}
}
答案 0 :(得分:0)
每次抽奖都以空白画布开始。因此,要绘制多个位图,您需要跟踪绘制每个项目符号的位置并多次调用drawBitmap。
此外,在onDraw中调用invalidate是一个坏主意 - 它会立即失效,从而导致性能问题。我建议改为使用计时器。过于频繁地绘制会导致性能问题。
答案 1 :(得分:0)
我只是表面上看过代码。您似乎只使用x y坐标跟踪一颗子弹。每次触摸事件时坐标都会重置,因此您将丢失之前的子弹。
使用动态数组或链接列表来跟踪屏幕上的所有项目符号 当有新的触摸时,将x,y添加到数组中 绘制项目符号时,遍历数组以绘制和更新每个项目符号 如果任何项目符号的y坐标离开屏幕,请从阵列中删除项目符号。