Android 2D游戏引擎1

  1. 前言

Android游戏在App Market上是最火的一类应用,但是和iPhone游戏相比,Android游戏还有很大差距,除了与Android手机的市场占有率不高有关以外,Android游戏开发的资料较少也是制约因素之一。本系列教程将从实现Android SDK带的lunarLander游戏的实现为主轴,实现一个完整的Android游戏引擎。当然这个游戏引擎没有使用OpenGL ES 2.0中的功能,也不能处理3D游戏,但是对于一个小型Android游戏开发应该已经足够了。

在本集中,我将介绍Android中的图像绘制技术,这个是Android游戏的基础。

  • 游戏视图

首先需要设计游戏的显示界面类A2dGameView(由于我们要实现一个完整的Android游戏引擎,A2d前缀代表使用Android本身图形类的游戏引擎,Egl2d是OpenGL ES 2D游戏引擎,Egl3d是OpenGL ES 3D游戏引擎),具体代码如下所示:

package com.bjcic.fage.a2d;

import com.bjcic.fage.game.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class A2dGameView extends SurfaceView implements SurfaceHolder.Callback {

 public A2dGameView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
  getHolder().addCallback(this);
  renderThd = new A2dRenderThd(getHolder(), this);
 }
 
 @Override
 public void onDraw(Canvas canvas) {
  Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
  canvas.drawColor(Color.BLACK);
  canvas.drawBitmap(bmp, 10, 10, null);
 }

 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  renderThd.setIsRunning(true);
  renderThdWrapper = new Thread(renderThd);
  renderThdWrapper.start();
 }

 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  boolean retry = true;
  renderThd.setIsRunning(false);
  while (retry) {
   try {
    renderThdWrapper.join();
    retry = false;
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }

 private A2dRenderThd renderThd = null;
 private Thread renderThdWrapper = null;
}
其中需要指出的该类的onDraw函数,该函数在屏幕(10,10)坐标出绘制一个bmp图片。

在public void surfaceCreated(SurfaceHolder arg0) 函数中,初始化并启动界面渲染类,界面渲染类启动界面渲染线程,完成界面的绘制工作。

在surfaceDestroyed(SurfaceHolder arg0)函数中停止界面渲染线程。

  • 渲染线程

package com.bjcic.fage.a2d;

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class A2dRenderThd implements Runnable {
 public A2dRenderThd(SurfaceHolder surfHolder, A2dGameView gameView) {
  this.surfHolder = surfHolder;
  this.gameView = gameView;
 }

 @Override
 public void run() {
  // TODO Auto-generated method stub
  Canvas canvas = null;
  while (isRunning) {
   canvas = null;
   try {
   canvas = surfHolder.lockCanvas();
   synchronized (surfHolder) {
    gameView.onDraw(canvas);
   }
   } finally {
    if (canvas != null) {
     surfHolder.unlockCanvasAndPost(canvas);
    }
   }
  }
 }
 
 public void setIsRunning(boolean isRunning) {
  this.isRunning = isRunning;
 }

 private SurfaceHolder surfHolder = null;
 private A2dGameView gameView = null;
 private boolean isRunning = true;
}
由上面代码可以看出,渲染线程是一个无形循环,每次循环中调用GameView来实现界面的绘制。

最后是在启动类中加载游戏视图,代码如下所示:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //setContentView(R.layout.main);
        setContentView(new A2dGameView(this));
    }

  • 总结

在本集中,我描述了游戏视图的绘制方法,以及游戏主循环的雏形。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android格斗游戏源码是指用于开发Android平台上的格斗游戏的源代码。 开发Android格斗游戏源码需要具备一定的编程知识和技能,如Java编程语言、Android开发框架、游戏设计等。这些源码通常包含游戏的界面设计、角色动画、游戏逻辑、碰撞检测、音效等内容。 在开发Android格斗游戏时,可以利用已有的游戏引擎,如Unity、Cocos2d等,或者使用自己编写的游戏引擎。同时,还需要借助相应的开发工具和资源,如图形编辑工具、音频编辑工具、角色动画资源等。 格斗游戏源码通常包含以下几个关键部分: 1. 游戏界面设计:包括菜单、角色选择、游戏场景等界面的设计和布局。 2. 角色动画:包括角色的行走、攻击、防御、受伤等动画效果的设计和实现。 3. 游戏逻辑:包括玩家输入控制、敌人AI、碰撞检测、血条显示等游戏逻辑的设计和开发。 4. 游戏音效:包括角色攻击、防御、受伤等音效的设计和实现。 5. 游戏关卡设计:包括关卡地图、敌人分布、任务目标等关卡设计和实现。 6.存档和进度管理:包括保存游戏进度、读取存档、角色升级等功能的设计和实现。 开发Android格斗游戏源码可以通过学习相关的编程知识以及参考其他开源游戏的实现方法来完成。同时,还需要不断测试和优化游戏,以提供更好的用户体验。 总结来说,开发Android格斗游戏源码需要掌握相应的编程知识和技术,并结合游戏设计和开发经验,通过使用合适的游戏引擎和工具,编写出满足用户需求的游戏源码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值