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

【Android小游戏】安卓小游戏开发(直播手把手教学系列一)

2015-09-19 19:11 417 查看
1.开发须知

在安卓开发中,  SurfaceView的地位是很重的,surfaceView 是View基础上派生出的扩展,是游戏中常用的显示类,而安卓游戏中主要分为两大模块,一。控制类,二。显示类。

可见surfaceView的重要性。

多年经验总结如下:

    1.View:显示视图,内置画布,提供图形绘制函数、触屏事件、按键事件函数等;必须在UI主线程内更新画面,速度较慢。

  2.SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。

 以上可知SurfaceView优于View

2.开发游戏视图

      (1)。第一步,完成游戏背景,这是最简单的。

         即绘制图像:

         


用上一个自定义类MySurface类,继承 SurfaceView

package yyc.com.mysurface;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
* Created by Administrator on 2015/9/18.
*/
public class MySurface extends SurfaceView implements SurfaceHolder.Callback,Runnable {

private Rect gameRect=new Rect();

private Bitmap mBg;
private SurfaceHolder  mHolder;

private Canvas mCanvas;

private Thread thread;

private boolean r;

public MySurface(Context context) {
super(context);
mp=new Paint();
mp.setAntiAlias(true);
mp.setDither(true);
mHolder=getHolder();
mHolder.addCallback(this);
setZOrderOnTop(true);
mHolder.setFormat(PixelFormat.TRANSLUCENT);

setFocusable(true);
setFocusableInTouchMode(true);

this.getKeepScreenOn();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
r=true;
thread=new Thread(this);
thread.start();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
gameRect.set(0, 0, width, height);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
r=false;
}

@Override
public void run() {
while (r)
{
long start = System.currentTimeMillis();
draw();
long end = System.currentTimeMillis();

try
{
if (end - start < 50)
{
Thread.sleep(50 - (end - start));
}
} catch (InterruptedException e)
{
e.printStackTrace();
}

}
}

Paint mp;
private void draw()
{
try
{
mCanvas=mHolder.lockCanvas();
mBg=loadImageByResId(R.drawable.bg);
mCanvas.drawBitmap(mBg, null, gameRect, null);
if (mCanvas != null)
{
//               mp.setColor(Color.BLUE);
//                mCanvas.drawRect(20, 30, 50, 50, mp);
//
//                mBg=loadImageByResId(R.drawable.bg);
//               mCanvas.drawBitmap(mBg, null, gameRect, null);
//   mp.set
}
} catch (Exception e)
{
} finally
{
if (mCanvas != null)
mHolder.unlockCanvasAndPost(mCanvas);
}
}
private Bitmap loadImageByResId(int id){
return BitmapFactory.decodeResource(getResources(), id);
}
}

其中

mCanvas.drawBitmap(mBg, null, gameRect, null);

就是绘制内容。

2.绘制人物

游戏中所必须具备的元素,大致为三种: 主角,敌方(或为友方),道具。

那么接下来我们来绘制人物
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: