Вот что я в итоге сделал. Надеюсь, это поможет некоторым начинающим начать работу.
У меня есть класс Sprite, представляющий объект, который я хочу переместить на экран:
public class Sprite {
private final String TAG = "Sprite";
private Drawable drawable;
private int x; // the X coordinate
private int y; // the Y coordinate
private boolean touched; // if droid is touched/picked up
private Speed speed; // the speed with its directions
public Sprite(Drawable drawable, int x, int y) {
this.drawable = drawable;
this.x = x;
this.y = y;
this.speed = new Speed();
}
public void draw(Canvas canvas) {
drawable.setBounds(new Rect(x, y, x+drawable.getIntrinsicWidth(), y+drawable.getIntrinsicHeight()));
drawable.draw(canvas);
}
public void move() {
if (!touched) {
x += (speed.getXv() * speed.getxDirection());
y += (speed.getYv() * speed.getyDirection());
}
}
public void handleActionDown(int eventX, int eventY) {
if (eventX >= (x - bitmap.getWidth() / 2) && (eventX <= (x + bitmap.getWidth() / 2))) {
if (eventY >= (y - bitmap.getHeight() / 2) && (y <= (y + bitmap.getHeight() / 2))) {
// droid touched
setTouched(true);
} else {
setTouched(false);
}
} else {
setTouched(false);
}
}
}
Тогда у меня есть основной игровой цикл. Это перебирает и вызывает методы рендеринга и обновления моей главной панели, которые выглядят так:
public void render(Canvas canvas) {
canvas.drawColor(Color.BLACK);
sprite.draw(canvas);
}
public void update() {
sprite.move();
}
Позиция, в которой спрайт будет перемещаться, обрабатывается при захвате события движения:
if (event.getAction() == MotionEvent.ACTION_MOVE) {
// the gestures
if (sprite.isTouched()) {
sprite.setX((int) event.getX());
sprite.setY((int) event.getY());
}
}
Надеюсь, это полезно. Если я урежу слишком много и есть что-то, чего ты не получишь, дай мне знать.
Следующий шаг, заставляющий объект следовать линии!