您的位置:首页 > 移动开发 > Android开发

模拟飞翔的小鸟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>}

}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  飞翔的小鸟 android