Android游戏开发教程:手教你写跳跃类游戏
Android游戏开发教程:手教你写跳跃类游戏
- package jumpball.game;
- import android.app.Activity;
- import android.os.Bundle;
- import android.util.DisplayMetrics;
- import android.view.Window;
- import android.view.WindowManager;
- public class GameActivity extends Activity {
- GameView mView;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置无标题
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏模式
- //获取系统的屏幕属性
- DisplayMetrics dm = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(dm);
- mView = new GameView(this, dm.widthPixels, dm.heightPixels);
- //应用这个布局
- setContentView(mView);
- }
- }
- GameView.java
- package jumpball.game;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- import android.view.SurfaceHolder.Callback;
- //本身就是一个Runnable接口
- public class GameView extends SurfaceView implements Callback, Runnable {
- public int width, height;
- private Canvas mCanvas;
- //刷新界面线程
- private Thread mThread;
- //处理者
- private SurfaceHolder mSurfaceHolder;
- private boolean mIsRunning = false;
- private int TIME_IN_FRAME = 50;
- GameActivity gameActivity;
- public GameView(Context context, int width, int height) {
- super(context);
- //setFocusable(true);
- //activity是 context的一个子类。
- gameActivity = (GameActivity) context;
- this.width = width;
- this.height = height;
- mSurfaceHolder = getHolder();
- mSurfaceHolder.addCallback(this);
- }
- public void mDraw() {
- //设置画布的颜色
- mCanvas.drawColor(Color.WHITE);
- drawBG(mCanvas);
- }
- public void drawBG(Canvas mCanvas) {
- Paint mPaint = new Paint();
- mPaint.setColor(Color.BLACK);
- //设置透明度
- mPaint.setAlpha(50);
- //设置抗锯齿
- mPaint.setAntiAlias(true);
- float h = height * 0.01666667f;
- for (int i = 0; i < height; i += h) {
- mCanvas.drawLine(0, i, width, i, mPaint);
- }
- }
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
- }
- public void surfaceCreated(SurfaceHolder holder) {
- mIsRunning = true;
- //新建一个刷屏线程
- mThread = new Thread(this);
- mThread.start();
- }
- public void surfaceDestroyed(SurfaceHolder holder) {
- //销毁这个,
- mIsRunning=false;
- }
- public void run() {
- //决定线程是否继续执行
- while (mIsRunning) {
- long startTime = System.currentTimeMillis();
- //调用mDraw进行绘制
- synchronized (mSurfaceHolder) {
- mCanvas = mSurfaceHolder.lockCanvas();
- mDraw();
- mSurfaceHolder.unlockCanvasAndPost(mCanvas);
- }
- long endTime = System.currentTimeMillis();
- int diffTime = (int) (endTime - startTime);
- while (diffTime < TIME_IN_FRAME) {
- diffTime = (int) (System.currentTimeMillis() - startTime);
- Thread.yield();
- }
- }
- }
- }
- 游戏介绍:这次编写的游戏是一款跳跃类游戏,类似与涂鸦跳跃。我们通过小球触碰方块,完成小球的跳跃。我们将在这一列的博客中来实现这款游戏的开发。
- 小小游戏,只供娱乐!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库