边做游戏边学android—7(塔防②创建目标)

来源:互联网 发布:ubuntu卸载自带输入法 编辑:程序博客网 时间:2024/05/17 06:37

创建目标类、代码如下:

package com.example.object;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import com.example.tafang.R;public class Target {    private Resources resources;    private Bitmap target;    private float object_x;    private float object_y;    private float object_width;    private float object_height;    private float middle_x;    private float middle_y;    private Paint paint;    private float screen_width;    private float screen_height;    public Target(Resources resources){        this.resources = resources;        initBitmap();        this.paint = new Paint();        paint.setColor(Color.BLACK);        object_x = 20;        object_y = 20;    }    public void getScreenWH(float screen_width,float screen_height){        this.screen_width = screen_width;        this.screen_height = screen_height;        object_x = this.screen_width/2;    }    private void initBitmap(){        target = BitmapFactory.decodeResource(resources, R.drawable.enemy);        object_width = target.getWidth();        object_height = target.getHeight();        middle_x = object_x + object_width/2;        middle_y = object_y + object_height/2;    }    public void drawSelf(Canvas canvas){        if(object_y < screen_width){            canvas.save();            canvas.rotate(90, object_x, object_y);            canvas.clipRect(object_x, object_y, object_x + object_width , object_y + object_height);            canvas.drawBitmap(target, object_x, object_y, paint);            canvas.restore();        }    }    public float getMiddle_x() {        return middle_x;    }    public void setMiddle_x(float middle_x) {        this.middle_x = middle_x;        this.object_x = middle_x - this.object_width/2;    }    public float getMiddle_y() {        return middle_y;    }    public void setMiddle_y(float middle_y) {        this.middle_y = middle_y;        this.object_y = middle_y - this.object_height/2;    }}

创建gameview类

package com.example.view;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import com.example.object.Target;import com.example.tafang.MainActivity;public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable {    private Target target;    private Thread thread;    private float screen_width;    private float screen_height;    private Canvas canvas;    private MainActivity main;    private SurfaceHolder sfh;    public GameView(Context context) {        super(context);        // TODO Auto-generated constructor stub        this.main = (MainActivity)context;        sfh = this.getHolder();        target = new Target(getResources());        sfh.addCallback(this);        thread = new Thread(this);    }    public void initObject(){    }    public void drawSelf(){        try{            canvas = sfh.lockCanvas();            canvas.drawColor(Color.WHITE);            target.drawSelf(canvas);        } finally{            if(canvas != null){                sfh.unlockCanvasAndPost(canvas);            }        }    }    @Override    public void run() {        // TODO Auto-generated method stub        int i=0;        while (true) {            if(i == 3){                initObject();                i=0;            }            drawSelf();            target.setMiddle_y(target.getMiddle_y() + 10);            if(target.getMiddle_y()>screen_height){                target.setMiddle_y(0);            }            i ++;            try {                Thread.sleep(200);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }    }    @Override    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {        // TODO Auto-generated method stub    }    @Override    public void surfaceCreated(SurfaceHolder arg0) {        // TODO Auto-generated method stub        screen_height = this.getHeight();        screen_width = this.getWidth();        target.getScreenWH(screen_width, screen_height);        if(thread.isAlive()){            thread.start();        } else {            thread = new Thread(this);            thread.start();        }    }    @Override    public void surfaceDestroyed(SurfaceHolder arg0) {        // TODO Auto-generated method stub    }}

运行结果如下:这里写图片描述

0 0