模拟飞翔的小鸟android版 文档一
2015-11-25 22:14
441 查看
第一步:创建好surfaceView模版第二步:在网上载取了一个小鸟的图片,大小为60*38第三步:点击屏幕,控制小鸟向上飞,然后自动下落,按差屏幕不放手时,小鸟旋停不动gameView代码://自定义的mySurfaceView类,继承sufaceView实现surfaceHolder.clllback和线程Runnablepublic class MyGameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{<span style="white-space:pre"> </span>private SurfaceHolder sh;//SurfaceView控制器<span style="white-space:pre"> </span>private Canvas iCanvas;//画布<span style="white-space:pre"> </span>private Paint ipaint;//画笔<span style="white-space:pre"> </span>private Path ipath;//路径<span style="white-space:pre"> </span>private boolean isRunning=true;//布尔参数,死循环提交绘图方法,直到退出false<span style="white-space:pre"> </span>private float screenWidth, screenHeight;// 屏幕宽/高<span style="white-space:pre"> </span>float x,y;//小鸟出现时的x,y坐标<span style="white-space:pre"> </span>Bitmap bitmap_Bird;<span style="white-space:pre"> </span>BirdManager birdManager;<span style="white-space:pre"> </span>Context mContext;<span style="white-space:pre"> </span>//带上下文参的构造方法,在里面实例化组件<span style="white-space:pre"> </span>public MyGameView(Context context) {<span style="white-space:pre"> </span>super(context);<span style="white-space:pre"> </span>mContext = context;<span style="white-space:pre"> </span>sh=this.getHolder();//获到surfaceHolder控制器<span style="white-space:pre"> </span><span style="white-space:pre"> </span>ipaint=new Paint();//获取画笔<span style="white-space:pre"> </span>ipath=new Path();//获到路径<span style="white-space:pre"> </span>ipaint.setColor(Color.RED);//设置画笔颜色<span style="white-space:pre"> </span>ipaint.setStyle(Style.STROKE);//设置画笔样式()<span style="white-space:pre"> </span>ipaint.setStrokeWidth(5);//设置画笔的宽度<span style="white-space:pre"> </span><span style="white-space:pre"> </span>sh.addCallback(this);//监听控制器(添加回调函数)<span style="white-space:pre"> </span>this.setFocusable(true);//设置当前焦点<span style="white-space:pre"> </span><span style="white-space:pre"> </span>bitmap_Bird = BitmapFactory.decodeResource(context.getResources(), R.drawable.bird60);<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>//死循环每隔100毫秒调用自定义具体画的方法,直到退出设为false<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void run() {<span style="white-space:pre"> </span>while(isRunning){<span style="white-space:pre"> </span>drawView();//调用自定义具体画的方法<span style="white-space:pre"> </span>try {<span style="white-space:pre"> </span>Thread.sleep(100);<span style="white-space:pre"> </span><span style="white-space:pre"> </span>} catch (InterruptedException e) {<span style="white-space:pre"> </span>e.printStackTrace();<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>//自定义画法<span style="white-space:pre"> </span>private void drawView() {<span style="white-space:pre"> </span>try {<span style="white-space:pre"> </span>if(sh!=null){<span style="white-space:pre"> </span>iCanvas=sh.lockCanvas();//获取画布<span style="white-space:pre"> </span>//设置画笔和位图没有锯齿<span style="white-space:pre"> </span>iCanvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));<span style="white-space:pre"> </span>iCanvas.drawColor(Color.WHITE);<span style="white-space:pre"> </span>birdManager.drawBird(iCanvas);<span style="white-space:pre"> </span>//iCanvas.drawBitmap(bitmap_Bird, x, y, null);<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>} catch (Exception e) {<span style="white-space:pre"> </span>}finally{<span style="white-space:pre"> </span>if(iCanvas!=null){<span style="white-space:pre"> </span>sh.unlockCanvasAndPost(iCanvas);//解锁画布并提交<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>//触屏事件<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public boolean onTouchEvent(MotionEvent event) {<span style="white-space:pre"> </span><span style="white-space:pre"> </span>switch (event.getAction()) {<span style="white-space:pre"> </span>case MotionEvent.ACTION_DOWN://按下去<span style="white-space:pre"> </span>System.out.println("down");<span style="white-space:pre"> </span>//birdManager.moveUp();<span style="white-space:pre"> </span>//如果在这加setIsMove(false),当按着屏幕不放手时,小鸟玄停不动<span style="white-space:pre"> </span>birdManager.setIsMove(false);<span style="white-space:pre"> </span>break;<span style="white-space:pre"> </span>case MotionEvent.ACTION_UP://放开<span style="white-space:pre"> </span>System.out.println("up");<span style="white-space:pre"> </span>//如果加下面注释掉的代码,小鸟会不停的向下掉//<span style="white-space:pre"> </span>birdManager.setIsMove(false);//<span style="white-space:pre"> </span>try {//<span style="white-space:pre"> </span>Thread.sleep(50);//<span style="white-space:pre"> </span>} catch (InterruptedException e) {//<span style="white-space:pre"> </span>// TODO 自动生成的 catch 块//<span style="white-space:pre"> </span>e.printStackTrace();//<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>birdManager.setIsMove(true);<span style="white-space:pre"> </span>new Thread(){<span style="white-space:pre"> </span>public void run() {<span style="white-space:pre"> </span><span style="white-space:pre"> </span>birdManager.moveUp();<span style="white-space:pre"> </span>};<span style="white-space:pre"> </span>}.start();<span style="white-space:pre"> </span>break;<span style="white-space:pre"> </span>case MotionEvent.ACTION_MOVE://移动<span style="white-space:pre"> </span>break;<span style="white-space:pre"> </span>default:<span style="white-space:pre"> </span>break;<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>//invalidate();//立刻重绘<span style="white-space:pre"> </span>return true;//返回true,提交给当前视图<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void surfaceCreated(SurfaceHolder holder) {<span style="white-space:pre"> </span>new Thread(this).start();//启动线程<span style="white-space:pre"> </span>}<span style="white-space:p4000re"> </span>@Override<span style="white-space:pre"> </span>public void surfaceChanged(SurfaceHolder holder, int format, int width,<span style="white-space:pre"> </span>int height) {<span style="white-space:pre"> </span>screenWidth = (float) getWidth();<span style="white-space:pre"> </span>screenHeight = (float) getHeight();<span style="white-space:pre"> </span>System.out.println("screenWidth="+screenWidth);<span style="white-space:pre"> </span>System.out.println("screenHeight="+screenHeight);<span style="white-space:pre"> </span>x = screenWidth/8;<span style="white-space:pre"> </span>y = screenHeight*3/4;<span style="white-space:pre"> </span>birdManager = new BirdManager(mContext,x,y,screenHeight);<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span>@Override<span style="white-space:pre"> </span>public void surfaceDestroyed(SurfaceHolder holder) {<span style="white-space:pre"> </span>//退出界面,先设循环参数为false,等线程停了,再睡个300毫秒,再真正退出<span style="white-space:pre"> </span>isRunning=false;<span style="white-space:pre"> </span>try {<span style="white-space:pre"> </span>Thread.sleep(300);<span style="white-space:pre"> </span><span style="white-space:pre"> </span>} catch (InterruptedException e) {<span style="white-space:pre"> </span>e.printStackTrace();<span style="white-space:pre"> </span>}<span style="white-space:pre"> </span><span style="white-space:pre"> </span>}}
小鸟控制类BirdManager
public class BirdManager { <span style="white-space:pre"> </span>Context mContext; <span style="white-space:pre"> </span>Bitmap bitmap_Bird; <span style="white-space:pre"> </span>float temp, left, top,mScreenHeight; <span style="white-space:pre"> </span>int bitmap_Bird_Width,bitmap_Bird_Height; <span style="white-space:pre"> </span>public BirdManager(Context context, float x, float y,float screenHeight) { <span style="white-space:pre"> </span>mContext = context; <span style="white-space:pre"> </span>mScreenHeight = screenHeight; <span style="white-space:pre"> </span>left = x; <span style="white-space:pre"> </span>top = y; <span style="white-space:pre"> </span>temp = y; <span style="white-space:pre"> </span>bitmap_Bird = BitmapFactory.decodeResource(context.getResources(), <span style="white-space:pre"> </span>R.drawable.bird60); <span style="white-space:pre"> </span>bitmap_Bird_Width = bitmap_Bird.getWidth(); <span style="white-space:pre"> </span>bitmap_Bird_Height = bitmap_Bird.getHeight(); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>public void drawBird(Canvas canvas) { <span style="white-space:pre"> </span>canvas.drawBitmap(bitmap_Bird, left, top, null); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>boolean isMove; <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>public void setIsMove(boolean b){ <span style="white-space:pre"> </span>isMove = b; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>public boolean getIsMove(){ <span style="white-space:pre"> </span>return isMove; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>public void moveUp() {<span style="white-space:pre"> </span> <span style="white-space:pre"> </span>temp = top; <span style="white-space:pre"> </span>while (temp - 10 <= top && getIsMove()) { <span style="white-space:pre"> </span>try { <span style="white-space:pre"> </span>Thread.sleep(50); <span style="white-space:pre"> </span>} catch (InterruptedException e) { <span style="white-space:pre"> </span>e.printStackTrace(); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>top = top - 10; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>// 到达当前顶部,然后上落 <span style="white-space:pre"> </span>while (top < mScreenHeight-bitmap_Bird_Height && getIsMove()) { <span style="white-space:pre"> </span>try { <span style="white-space:pre"> </span>Thread.sleep(50); <span style="white-space:pre"> </span>} catch (InterruptedException e) { <span style="white-space:pre"> </span>e.printStackTrace(); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>top = top + 5; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>if (top == mScreenHeight-bitmap_Bird_Height) { <span style="white-space:pre"> </span>return;// 嫁出最外围循环,当小鸟掉到最底部时 <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories