边做游戏边学android—7(塔防②创建目标)
2015-06-03 00:08
288 查看
创建目标类、代码如下:
创建gameview类
运行结果如下:
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 } }
运行结果如下:
相关文章推荐
- 2.Android整理清单
- Android 水波纹点击效果(Ripple Effect)
- Android开源框架
- Android崩溃处理
- android应用程序的混淆打包规范
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
- android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
- 使用WakeLock使Android应用程序保持后台唤醒
- 使用WakeLock使Android应用程序保持后台唤醒
- Android中的信使Messenger的源码解析
- Android 屏幕适配
- adb操作多个设备
- Android入门级编译错误汇总
- 今天发现了个Android秘密
- 【Android开发】线程与消息处理-通过实现Runnable接口来创建线程
- 一个自动清理Android项目无用资源的工具类及源码 推荐
- 【Android开发】线程与消息处理-实现多线程
- android中回调机制,小demo可以理解
- android开发小细节
- Android程序如何调用webservice