其实一提到游戏引擎,很多初学者,会显得有一种畏惧感,会觉得这是一个非常高深的东西。曾经页游行业很乱,就像现在的手游一样,各种非计算机专业出生的同学,经过一个短暂的培训就开始了程序员之旅。

这篇文章仅仅从简单的角度讲解一下游戏引擎在显示渲染上的原理,用位图渲染的方式来实现,供新手们学习交流,如有不足的,望指出。

最简单的图形引擎,主要三个部分:摄影机(Camera),场景画布(Canvas),画布中的显示对象(Displayobject)。

为了便于大家理解,我直接把Camera都忽略掉,假设我们FlashPlayer的整个窗口就是Camera,就剩下了这个样子。

Flash本身就是一款图形引擎,但现在我抛弃掉Flash的渲染,重新按自己的方式通过位图来渲染我们的游戏,来让大家更容易理解。

首先,定义Canvas画布:

假设我们的游戏帧频是基于FlashPlayer的。

 public class Canvas extends Sprite{//画布上的位图  private var _canvasBitMap:Bitmap = null;//画布上的位图数据private var _canvasBitMapData:BitmapData = null;//画布上的显示对象private var _objList:Array = null;public function Canvas(){addEventListener(Event.ENTER_FRAME,onEnterFrame);//假设我们画布是1000*600的大小_canvasBitMapData = new BitmapData(1000,600);_canvasBitMap = new Bitmap(_canvasBitMapData);addChild(_canvasBitMap);}//每一帧的心跳入口private function onEnterFrame(e:Event):void{update();draw();}//数据的更新private function update():void{for(var i:int = 0;i<_objList.length;i++){_objList[i].update();}}//渲染private function draw():void{clear();for(var i:int = 0;i<_objList.length;i++){_objList[i].draw(_canvasBitMapData);}}//清空上一帧的位图数据private function clear():void{}//往画布上添加一个显示对象private function addChild(obj:Displayobject):void{_objList.push(obj);}}

其次,定义Displayobject

 public class Displayobject{//显示对象自己的位图数据private var _bitMapData:BitmapData = null;public var x:Number;public var y:Number;public var height:Number;public var width:Number;public function Displayobject(){}//更新显示对象数据public function update():void{}//渲染显示对象public function draw(data:BitmapData):void{data.copyPixels(_bitMapData,); //将自己的位图数据拷贝到画布上}}

就这么简单的两个类,我们的基于位图的渲染引擎的出来了

接口update()

public function update():void

这个接口与draw()是在每一帧的时候都会调用,我们一般用它来处理一些什么东西呢?

1.  位置的更新,也就是坐标的更新,每一个显示对象在画布都有坐标,假设它是一个匀速运动的小车,那我们就可以根据它的运行速度,每一帧的时间,得到它当前的坐标。

2. 碰撞的检测,我们也可以把一些碰撞的检测放到这里来处理。

3. 动作的播放,比如我们有一个动作序列表,[1,2,3,4,5,6] 每一帧我们是播一个序列值,这个序列值是多少,决定了_bitMapData的具体计算方式。

接口draw()

public function draw(data:BitmapData):void{data.copyPixels(_bitMapData,); //将自己的位图数据拷贝到画布上}

这个接口的目的,主要是将update计算好后的一个新的位图数据,把它画到画布场景中去,上面给的copyPixels是不对的,这样写的目的是告诉大家,拷贝这个位图数据到画布中去,主要与新的位图数据的坐标和宽高有关。

一个简单的游戏引擎,其实就是这个样子,再加上IO,声音,Socekt,然后再把它用MVC模式合理化,就可以拿来开发游戏了。

引擎的渲染,也就是draw()是非常消耗CPU资源的,我们常常会在这些地方做一些优化,比如我们有一些显示对象很明显能算出它是会被前面的显示对象完全档住,那这种对象我们是不是可以考虑在draw的时候不渲染它呢。

现在Flash已经支持硬件加速了,在actionscript里增加了一个stage3D,只要我们理解到了图像引擎的原理,我们自己尝试去写一个游戏引擎来练习练习也不难的,同样我们拿到一款成熟的引擎比如Starling的时候,要把它理解清楚也很容易。

Flash AS游戏引擎原理相关推荐

  1. 【Unity入门教程】 第八章 人工智能【中国大学MOOC游戏引擎原理及应用】

    以下均为来自中国大学mooc 游戏引擎原理及应用时的学习笔记,不含商用,仅供学习交流使用,如果侵权请联系作者删除. 文章目录 8.1 自动寻路 8.2 巡逻 8.3 视野 8.4 自动攻击 8.5 追 ...

  2. 3D游戏引擎原理简介

    作者:Luke Hodorowicz 翻译:乐晨光 (2001/9/28) 本人对3D也不甚了解,译文动机一则是内容所致兴致昂然,二则锻炼英译中技能.由本人水平及经验有限,文中绝对不乏大量误解与误译, ...

  3. nes 游戏引擎 原理分析

    apk 下载位置: http://download.csdn.net/detail/a332324956/7544819 nes 模拟器源码:联系本人QQ:332324956 Android 主入口M ...

  4. 快速创建精彩的Flash游戏(一) Flash2D游戏引擎简介

    原文链接:http://xiazhihui321.blog.163.com/blog/static/81328893201141851158857/ Adobe Flash自诞生之日就与游戏结下不解之 ...

  5. Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎

    编辑本段简介 Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, And ...

  6. AI最后--热门游戏引擎(CN地区)

    原文链接:http://blog.renren.com/GetEntry.do?id=723979478&owner=253982684 文章链接:http://blog.csdn.net/c ...

  7. 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?

    现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...

  8. 游戏引擎编程需要哪些基本数学知识?

    现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...

  9. 从新建文件夹开始构建UtopiaEngine游戏引擎(2)

    本章序言 摸了两个月的鱼,又一次拾起了自己引擎的框架,开始完善引擎系统,如果非要用现实中的什么东西比喻的话,那么我们目前实现的框架连个脚手架都不是.把这项目这样晾着显然不符合本人的风格,而且要作为毕业 ...

最新文章

  1. 面试:SpringBoot中的条件注解底层是如何实现的?
  2. R语言Brown-Forsythe检验验证组间方差是否相等实战:执行Brown-Forsythe检验、如果各组间的方差不相等我们该怎么办(进行方差分析)
  3. IPv6时代的《TCP/IP详解》!
  4. 软件构架师的十大特点
  5. 数据库设计时设计标识字段的一些思考
  6. 《圈圈教你玩USB》 第二章 USB 硬件系统设计_测试程序的编写和调试——看书笔记
  7. NODDI在临床研究中的应用
  8. 软件测试基础-概念(视频教程)
  9. spring cloud微服务(二)euraka服务消费者
  10. java springboot实现pdf在线盖章,签字的功能
  11. C#重写和重载的区别分析
  12. 你知道视频去水印的方法有哪些吗?分享2个实用的去水印方法
  13. 【大数据】Linkis如何安装部署,及一些常见问题
  14. Linux 系统调用 fork wait exec
  15. android11安装第三方,Android Apk安装(兼容Android11 Api30)
  16. 压力测试-Jmeter测试移动APP
  17. Matlab-函数拟合
  18. linux挂载安卓手机,安卓USB设备U盘挂载工具(StickMount Pro)
  19. New Concept English3 Lesson 1. A puma at large【精讲学习笔记】
  20. Golang安装iris

热门文章

  1. 2020年美国大学计算机科学专业排名,2020年USNews美国大学计算机工程专业研究生排名...
  2. 2023年12306购票平台自动化购票二|解决车次查找与预定
  3. 通信线路工程验收规范_弱电施工规范与工艺标准
  4. 你的第一篇SCI是怎么发的呢?
  5. 浙江省计算机c语言二级成绩,[转载]浙江省计算机二级考试C语言
  6. 梦恋千古解忧愁,风恋落花独悠悠
  7. 护士排班问题matlab,护士排班问题的研究
  8. 计算机英语教程第五版答案解析,计算机专业英语教程(第5版)翻译完整版
  9. 基于 Chromium 的 Edge 浏览器正在整合文本预测功能
  10. Python爬虫总结——常见的报错、问题及解决方案