Я пытаюсь, чтобы случайные объекты появлялись на моем экране как препятствия каждые 0,5 секунды.Что мне нужно сделать, чтобы это произошло?
Я создал класс «входящий» для создания различных объектов класса и добавлял их в «препятствия» каждые 500 мс.Я добавил метод рисования и пытаюсь вызывать его для каждого объекта, чтобы он двигался к игроку.
Входящий класс
package com.example.neonrace;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
class incoming {
int top;
int left;
int right;
int bttm;
Rect carr;
Bitmap incom;
Context context;
public incoming(int top, int left, int right, int bttm, Rect carr)
{
this.top = top;
this.left = left;
this.right = right;
this.bttm = bttm;
this.carr = carr;
this.incom = incom;
this.context = context;
}
public void draw(Canvas canvas){
incom = BitmapFactory.decodeResource(context.getResources(),
R.drawable.inc);
Rect carr = new Rect(this.left, this.top, this.right,
this.bttm);
canvas.drawBitmap(incom, null, carr, null);
if (GameView.r == 0) {
this.top = 0;
this.left = GameView.RoadLeft;
this.right = (GameView.DWidth * 4) / 10;
this.bttm = (int) ((GameView.DHeight * 1.5) / 10);
this.top = this.top + GameView.speed;
this.bttm = this.bttm + GameView.speed;
}
else if (GameView.r == 1) {
this.top = 0;
this.left = GameView.DWidth * 4 / 10;
this.right = GameView.DWidth * 5 / 10;
this.bttm = (int) ((GameView.DHeight * 1.5) / 10);
this.top = this.top + GameView.speed;
this.bttm = this.bttm + GameView.speed;
}
else if (GameView.r == 2){
this.top = 0;
this.left = GameView.DWidth * 5 / 10;
this.right = (GameView.DWidth * 6 / 10);
this.bttm = (int) ((GameView.DHeight * 1.5) / 10);
this.top = this.top + GameView.speed;
this.bttm = this.bttm + GameView.speed;
}
else {
this.top = 0;
this.left = GameView.DWidth * 6 / 10;
this.right = GameView.DWidth * 7 / 10;
this.bttm = (int) ((GameView.DHeight * 1.5) / 10);
this.top = this.top + GameView.speed;
this.bttm = this.bttm + GameView.speed;
}
}
}
Основной GameView
package com.example.neonrace;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class GameView extends View {
public static int r;
public static int RoadLeft;
public static int DWidth;
public static int DHeight;
public static int speed;
Handler handler;
Runnable runnable;
final int UpdateMS = 30;
Bitmap background;
Bitmap car;
Display display;
Point point;
Rect rect;
Rect road;
Rect rcar;
int RoadRight;
int Carleft, Carright, Carup;
Paint paint;
int topRoad = -1000000;
int downRoad ;
int score ;
Random random;
List obstacles = new ArrayList<incoming>();
int NumOfObst;
Timer timer = new Timer();
int i;
Canvas canvas;
public GameView(Context context) {
super(context);
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
invalidate();
}
};
background =
BitmapFactory.decodeResource(getResources(),R.drawable.grass);
car = BitmapFactory.decodeResource(getResources(),
R.drawable.enzo);
display =
((Activity)getContext()).getWindowManager().getDefaultDisplay();
point = new Point();
display.getSize(point);
DWidth = point.x;
DHeight = point.y;
speed = 15;
RoadLeft = point.x * 3 / 10;
RoadRight = point.x * 7 / 10;
Carleft = point.x * 5 / 10;
Carright = point.x * 6 / 10;
Carup = point.y * 7 / 10;
rect = new Rect(0,0,DWidth,DHeight);
paint = new Paint();
paint.setColor(Color.BLACK);
Random random = new Random();
int r = random.nextInt(5);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(background, null, rect, null);
topRoad = topRoad + speed;
downRoad = downRoad + DHeight/2 + speed;
road = new Rect(RoadLeft, topRoad, RoadRight,downRoad);
canvas.drawRect(road, paint);
timer.schedule(new TimerTask() {
@Override
public void run() {
obstacles.add(incoming);
}
},500);
NumOfObst = obstacles.size();
for (i = 0; i <= NumOfObst; i++){
obstacles.get(i).draw(Canvas);
}
rcar = new Rect(Carleft, Carup, Carright, DHeight*9/10);
canvas.drawBitmap(car,null,rcar,null);
handler.postDelayed(runnable,UpdateMS);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
int tchx = (int) event.getX();
if (action == MotionEvent.ACTION_DOWN){
if (tchx < DWidth/2){
Carleft = Carleft - (DWidth / 10);
Carright = Carright - (DWidth / 10);
}
else {
Carleft = Carleft + (DWidth / 10);
Carright = Carright + (DWidth / 10);
}
}
return true;
}
}
Я ожидал, что случайные объекты будут на пути игрока, но на самом деле я получаю ошибку, которую не знаю, как исправить.