android飞机大战
来源:互联网 发布:编程sum*是什么意思 编辑:程序博客网 时间:2024/05/04 16:19
Android飞机大战
简述
android游戏继承surfaceView开发,实现Callback接口,Callback接口作用是回调。
实现Callback接口后,要实现三个抽象方法:surfaceCreated(),surfaceDestroyed(),surfaceChanged()
然后再surfaceCreated()方法里面实例化对象,surfaceDestroyed()里面结束。
创建一个渲染线程,RenderThread,获取画笔,在surfaceView里面去绘图。
飞机与子弹对象继承一个我自己定义的Sprite类,便于在surfaceView里面绘图。
MainActivity里面的setContentView(参数),参数里面不用XML页面,换成自己定义的surfaceView。
监听触屏事件的方法onTouchEvent(MotionEvent event)把获得的触屏事件传递给mysurfaceView的dealTouchEvent()方法。
部分核心代码
MainActivity:
public class MainActivity extends Activity {private MySurfaceView mySurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mySurfaceView = new MySurfaceView(this); setContentView(mySurfaceView); } public boolean onTouchEvent(MotionEvent event){ mySurfaceView.dealTouchEvent(event); return super.onTouchEvent(event); }}
surfaceView
public class MySurfaceView extends SurfaceView implements Callback
surfaceCreated()方法
public void surfaceCreated(SurfaceHolder holder) {Bitmap img = BitmapFactory.decodeResource(getResources(),R.drawable.mainplane);mainPlane = new MainPlane(img,new Point(330,900));bp = new BossPlane(BitmapFactory.decodeResource(getResources(),R.drawable.boss),new Point());sp = new CopyOnWriteArrayList<SecPlane>();bs = new CopyOnWriteArrayList<Bullet>();isRun = true;renderThread.start();System.out.println("开始");new Thread(){public void run() {while(true){//每秒发射10枚子弹(自动发射)bullet = mainPlane.createBullet(getResources());bs.add(bullet);try {sleep(100);} catch (Exception e) {e.printStackTrace();}}};}.start();new Thread(){public void run() {try {sleep(5000);} catch (Exception e1) {e1.printStackTrace();}while(true){//自动出现敌机SecPlane secPlane = new SecPlane(BitmapFactory.decodeResource(getResources(), R.drawable.secplane),new Point((int)(Math.random()*600),0));sp.add(secPlane);try{sleep(300);}catch(Exception e){e.printStackTrace();}}};}.start();}
RenderThread渲染线程
class RenderThread extends Thread{Canvas lockCanvas = null;private Paint paint = new Paint();@Overridepublic void run() {System.out.println(holder);while(isRun){try{lockCanvas = holder.lockCanvas();lockCanvas.drawRect(0,0,getWidth(),getHeight(),paint);mainPlane.drawMySelf(lockCanvas);bp.drawMySelf(lockCanvas);
MainPlane----->玩家控制的飞机:
public class MainPlane extends Sprite{public int speed = 10;public MainPlane(Bitmap img, Point currentPoint) {super(img, currentPoint);}public Bullet createBullet(Resources res){Point point = new Point(currentPoint.x + 66,currentPoint.y);Bullet bullet = new Bullet(BitmapFactory.decodeResource(res, R.drawable.bullet),point);return bullet;}public void move(int x,int y){currentPoint.x = x - 84;currentPoint.y = y - 216;}}
Sprite类
public class Sprite {protected Bitmap img;protected Point currentPoint;public Sprite(Bitmap img,Point currentPoint){this.img = img;if(currentPoint == null)currentPoint = new Point(0,0);this.currentPoint = currentPoint;}public void drawMySelf(Canvas canvas){if(img != null && canvas != null){canvas.drawBitmap(img,currentPoint.x,currentPoint.y,null);}}public Point getCurrentPoint(){return currentPoint;}}
上述是部分核心代码
图示游戏
虚拟机上截gif图很卡,手机上运行比市场上的app还流畅
2 0
- android飞机大战
- android飞机大战
- Android 开发飞机大战
- Android 项目之飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 飞机大战
- 黑马学习-------------------android小游戏--飞机大战(初步)
- android:“新版飞机大战”源代码开源啦!
- 初学Android之飞机大战——飞机大战所需素材
- 高效编程之互斥锁和自旋锁的一些知识
- uboot中利用TFTP和NFS加载内核镜像和根文件系统
- 谈zTree树插件
- Springboot jpa 解决Mysql8小时问题
- HBase协处理器知识点
- android飞机大战
- Contains Duplicate
- 大话设计模式12----外观模式
- 整数在内存中的存储形式。。
- 硬盘安装win7
- Eclipse 快捷键
- 优先级队列 priority_queue
- const char * 与 char * const
- [尺取法] cf 701c They Are Everywhere