SkazOff Blog

Programming | MonsterHunter | Part#2

В связи с небольшими косяками у Андройд студии пост задержался, поэтому сегодня будет по-максимуму кода. Продолжаем начатое

Создадим класс Hero для определения полей хранения координат. Все крайне просто:

public class Hero {
    private Bitmap bitmap;
    private int x;
    private int y;

    public Hero(Bitmap bitmap, int x, int y) {
        this.bitmap= bitmap;
        this.x= x;
        this.y= y;
    }

    public Bitmap getBitmap(){
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap) {
        this.bitmap= bitmap;
            }

    public int getX(){
        return x;
            }

    public void setX(int x){
        this.x= x;
    }
    public int getY(){
        return y;
    }
    public void setY(int y){
        this.y= y;
    }

Добавим рисование и метод обработки касания:

public boolean isTouched(){
    return touched;
}

public void setTouched(boolean touched){
    this.touched= touched;
}

public void draw(Canvas canvas){
    canvas.drawBitmap(bitmap, x-(bitmap.getWidth()/2), y-(bitmap.getHeight()/2),null);
}

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))){
            setTouched(true);
        }else{
            setTouched(false);
        }
    }else{
        setTouched(false);
    }

}

Доработаем онТачЭвент и онДроу:

@Override
public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction()== MotionEvent.ACTION_DOWN) {
        hero.handleActionDown((int) event.getX(), (int) event.getY());
        if (event.getY() > getHeight() - 50) {
            thread.setRunning(false);
            ((Activity) getContext()).finish();
        } else {
            Log.d(TAG, "Coords: x=" + event.getX() + ",y=" + event.getY());
        }
    }if(event.getAction()== MotionEvent.ACTION_MOVE){
            if(hero.isTouched()){
                hero.setX((int)event.getX());
                hero.setY((int)event.getY());
            }
        }if(event.getAction()== MotionEvent.ACTION_UP){
            if(hero.isTouched()){
                hero.setTouched(false);
            }
        }
        return true;
    
}


@Override
protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        hero.draw(canvas);
    }

Запускаем, проверяем — все работает.

К  слову — немного поменял пикчу героя;)

До новых встреч)

Оставить комментарий