import
java.util.ArrayList;
import
java.util.Random;
import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.view.MotionEvent;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
public
class
GameView
extends
SurfaceView
implements
SurfaceHolder.Callback {
SurfaceHolder holder;
DrawThread drawThread;
Ball[] ballArray =
new
Ball[
5
];
int
ballPointer =
0
;
static
ArrayList<Obstruction> obstructList =
new
ArrayList<Obstruction>();
int
xDown, yDown;
public
GameView(Context context) {
super
(context);
holder = getHolder();
holder.addCallback(
this
);
Random random =
new
Random();
for
(
int
i =
0
; i <
3
; i++) {
Obstruction o =
new
Obstruction(random.nextInt(
380
) +
50
, random.nextInt(
700
) +
50
,
50
);
obstructList.add(o);
}
}
@Override
public
void
surfaceCreated(SurfaceHolder holder) {
drawThread =
new
DrawThread(
this
);
drawThread.start();
}
@Override
public
void
surfaceChanged(SurfaceHolder holder,
int
format,
int
width,
int
height) {
}
@Override
public
void
surfaceDestroyed(SurfaceHolder holder) {
drawThread.flag =
false
;
drawThread =
null
;
}
public
void
draw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
Paint paint =
new
Paint();
paint.setTextSize(
25
);
paint.setColor(Color.WHITE);
canvas.drawText(
"小球碰撞检测"
,
50
,
20
, paint);
for
(
int
i =
0
; i <
5
; i++) {
if
(ballArray[i] !=
null
) {
ballArray[i].drawSelf(canvas);
}
}
for
(
int
i =
0
; i < obstructList.size(); i++) {
obstructList.
get
(i).drawSelf(canvas);
}
}
@Override
public
boolean onTouchEvent(MotionEvent event) {
int
x = (
int
) event.getX();
int
y = (
int
) event.getY();
if
(event.getAction() ==
0
) {
xDown = x;
yDown = y;
Ball ball =
new
Ball(x, y,
0
,
0
,
20
);
if
(ballArray[ballPointer] !=
null
) {
ballArray[ballPointer].ballThread.flag =
false
;
ballArray[ballPointer].ballThread =
null
;
}
ballArray[ballPointer] = ball;
}
else
if
(event.getAction() ==
1
) {
int
xOffset = x - xDown;
int
yOffset = y - yDown;
double sin = yOffset / Math.sqrt(xOffset * xOffset + yOffset * yOffset);
double cos = xOffset / Math.sqrt(xOffset * xOffset + yOffset * yOffset);
ballArray[ballPointer].startTimeX = System.nanoTime();
ballArray[ballPointer].startTimeY = System.nanoTime();
ballArray[ballPointer].vX = (float) (
500
* cos);
ballArray[ballPointer].vY = (float) (
500
* sin);
ballArray[ballPointer].ballThread.start();
ballPointer ++;
if
(ballPointer >=
5
) {
ballPointer =
0
;
}
}
return
true
;
}
}