1. SurfaceView 游戏框架实例

实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下:

【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)

 

步骤:

新建项目“GameSurfaceView”,首先自定义一个类"MySurfaceView",此类继承SurfaceView,并实现android.view.SurfaceHolder.Callback 接口,代码如下

package com.example.ex4_5;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

//Callback接口用于SurfaceHolder 对SurfaceView 的状态进行监听
public class MySurfaceView extends SurfaceView implements Callback{
    //用于控制SurfaceView 的大小、格式等,并且主要用于监听SurfaceView 的状态
    private SurfaceHolder sfh;
    private Paint paint;
    private int textX=30,textY=30;
    public MySurfaceView(Context context) {
        super(context);
        //实例SurfaceView
        sfh = this.getHolder();
        //为SurfaceView添加状态监听
        sfh.addCallback(this);
        //实例一个画笔
        paint = new Paint();
        //设置字体大小
        paint.setTextSize(30);
        //设置画笔的颜色
        paint.setColor(Color.GREEN);
    }

    @Override
    //当SurfaceView 被创建完成后响应
    public void surfaceCreated(SurfaceHolder holder) {
        myDraw();
    }

    @Override
    //当SurfaceView 状态发生改变时响应
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        
    }

    @Override
    //当SurfaceView 状态被摧毁时响应
    public void surfaceDestroyed(SurfaceHolder holder) {
        
    }

    //SurfaceView 是通过SurfaceHolder 来修改其数据,所以即时重写View 的onDraw(Canvas canvas)函数,在SurfaceView 启动时也不会执行到,因此这里自定义绘图函数
    public void myDraw()
    {
        //获取SurfaceView 的Canvas 对象,
        //同时对获取的Canvas 画布进行加锁,防止SurfaceView 在绘制过程中被修改、摧毁等发生的状态改变
        //另外一个lockCanvas(Rect rect)函数,其中传入一个Rect矩形类的实例,用于得到一个自定义大小的画布
        Canvas canvas = sfh.lockCanvas();
        //填充背景色,即刷屏,每次在画布绘图前都对画布进行一次整体的覆盖
        canvas.drawColor(Color.BLACK);
        //绘制内容
        canvas.drawText("This is a Text !", textX, textY, paint);
        //解锁画布和提交
        sfh.unlockCanvasAndPost(canvas);
    }

    //重写触屏监听事件
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        textX = (int)event.getX();
        textY = (int)event.getY();
        myDraw();
        return super.onTouchEvent(event);
    }
    
}
MySurfaceView

相关文章:

  • 2022-12-23
  • 2022-01-03
  • 2021-04-08
  • 2021-11-04
  • 2021-10-11
猜你喜欢
  • 2021-11-09
  • 2021-08-01
  • 2021-07-28
  • 2022-02-04
  • 2021-10-19
  • 2021-12-07
相关资源
相似解决方案