游戏搜索引擎代码码

如何从零开始写一个简单的游戏引擎?
假设能使用的基础库只有DirectX或者OpenGL。该问题从这个问题衍生出来:
正在用纯C写一个游戏引擎使用openGL做绘制的,大概有2年了从零开始写得。基本完成了80%左右了,实现了如下功能:1. 在c标准库之上封装了一个基础库,包括动态数组,哈希映射,二进制数据解析,JSON解析器,文件读写。定义了一套OOC的style,一些通用设计模式的封装,一个数学库包括向量和矩阵相关的计算。2. 利用openGL封装了一个绘制层。包括绘制树结构,精灵绘制和批量绘制,纹理管理,摄像机管理,openGL工具类封装,着色器的管理,Tween算法实现和封装,图片数据的解析等。3. 程序层的封装。包括窗口的管理,层结构与绘制层组装,事件处理,定时器管理,状态机行为树等。4. 物理引擎。完成了不同形状的定义和碰撞检测,碰撞事件回调。碰撞后的物理运动还没实现。5. 应用扩展层。实现了一个粒子系统,纹理集合系统,地图系统和一个骨骼动画。基本上实现一个2D游戏是没有问题了,未来会加入3D的扩展支持。物理引擎我会继续做成一个完整的2D系统,以后会是3D的。打算自己实现一个像lua那种尺寸的脚本嵌入。对了,还有就是实现一个ui系统。目前正在边完善引擎边利用这个引擎制作游戏。下面谈谈体会和过程,其实体会很多很深,我是空闲时间写得所以需要很多精力和坚持。写引擎要有目的性,我是在为制作一个游戏去做一个引擎,游戏需要什么功能,我就去实现什么功能。实现一个功能需要什么算法或是相关的技术,我就去查找和学习。在写得同时,我看完了好几本openGL的书,还有着色器方面的,还看了很多算法和C语言的一些书,有中文的也有英文的关键要有激情去推动自己。平时工作会用到一些开源的引擎包括cocos2dx和libgdx,我也会关注和看一些开源的引擎2D 3D都会看看。但是不会过多的去看实现,我怕影响我得思路,就像写小说不要过多的阅读别人的作品会影响自己的风格。我既然自己要写引擎那么我要的就是原创。可能为了实现一款游戏而制作的引擎不够通用,通常情况下是这样的。我在实现不同模块的时候尽管较劲脑汁也不能预测未来更好的设计可能性。那么在写着写着发现需要重构的时候,就要当机立断无论推翻多少重写多少就要立马去做不要想着实现了功能再说。可以说,写到现在我删掉的代码是写的3.5倍左右。无论是什么功能,无论是什么算法,无论是什么设计,只要我发现让我感觉更好的我就会立马替换引擎的实现。我相信慢慢的一点点的,为了实现一个游戏,到实现了一个游戏之后,第一个版本的引擎就有了。那么后面就是一个更精彩的开始。
做一个游戏引擎,稍微想想就觉得挺复杂了,先罗列出几个必须要做的模块:资源和文件管理系统,游戏主循环,输入系统,渲染引擎,动画系统,碰撞系统,游戏性系统,若是想的再复杂一点,还得加入游戏相关的调试工具和性能剖析工具。这样一来,就很容易陷入过度设计的泥沼,在大三上学期时,我们做的XiHad项目()就遇到了这样的问题,引擎的过度设计导致后续的开发时间被无限缩短,最终却发现引擎中很多的功能实际上游戏中却用不到,真是令人哭笑不得。由于题目中说的是实现一个简单的游戏引擎,我给出的建议是:先用OpenGL或者DirectX制作一个简单的游戏,再把游戏中可复用的部分剥离出来,这就成了一个简单的游戏引擎。游戏史上几个最著名的游戏引擎都是这样做出来的,比如:Quake游戏引擎是制作雷神之锤的副产品,虚幻是制作战争机器的副产品,所以,我相信这种将游戏引擎作为游戏的副产品的经验同样适用于大型游戏引擎的开发。
  感谢选易兄的邀请,邀请的这几天因为一直工作,直到回校的时候才有比较充足的时间这个问题。那么如何从零开始写一个简单的游戏引擎?那么我们首先要想几个基础的问题。  一、什么是游戏引擎  二、游戏引擎必要的模块有哪些  三、要如何学着能制作游戏引擎  四、如何从零开始写一个简单的游戏引擎  我假设需要“从零开始”写简单的游戏引擎的人不会任何代码(这样你就可以不用看了啊别打我),那么再假设“从零开始”的人不会DirectX或者OpenGL(这样你也可以不用看了啊别打脸),那么假设那个人这两个都会,“这已经不是从零开始做一个游戏引擎了啊=。=”所以:如果对代码或者计算机图形学,数据结构等不了解的同学,我的建议是,先学会C/C++语言 , 还有DirectX或者OpenGL , 还有数据结构 当然如果你懂汇编语言就更加Nice。  现在的从零开始,就是已经具备了基本的编程能力,基本的计算机图形学知识,基本的数据结构之下,从无到有制作一个自己的游戏引擎。  第一个问题来了:什么是游戏引擎  在我看来,游戏引擎其实也就是一个库,能够要让用户极其方便从头开始制作一个游戏。游戏有两个部分非常的重要,就是游戏的画面与交互。所以游戏引擎至少要能够做到图形渲染,物理碰撞,游戏逻辑这三大块的内容,并且还要带有一个强大的配套开发环境。图形渲染方面,不同的引擎图形渲染的能力有所不同,物理碰撞许多引擎会直接使用第三方的专门物理引擎来制作,游戏逻辑就是对脚本等代码进行支持,因为纯手打所以具体就不粘文档上来看了。大家可以百度一下虚幻三、寒霜、Unity等。  二:游戏引擎必要的模块有哪些  刚才提到的已经是非常成熟的大型游戏引擎,那么从无到有的简单引擎,要做哪些?我个人认为只需要做好图形渲染就可以了。游戏其实就是图形的界面,图形就是游戏的重中之重,并不仅仅是“图形渲染”四个字,其中很多内容可以抠出来讲,呈现三角形,呈现模型,贴图,地形,Shader,粒子,等等等等内容都属于图形渲染。  如果你要做一个小的,我建议你做好如下模块:  精灵类Sprite  动画精灵类AnimationSprite  按钮类Button  摄像机Camera  模型GameObject  地形Land  资源管理类ResManager  精灵管理类SpriteManager  渲染管理类RenderManager  输入Input  声音Sound  纹理类Texture  游戏主类Game把这些模块做好,你至少能够创建一个小的游戏,或者说能够创建一个可以和玩家顺利交互的游戏。  三:要如何学着制作游戏引擎,模块了解方面我推荐
先生的《游戏引擎架构》一书,学习范例我推荐 触控科技 的Cocos2d-x来学习。  四:如何从零开始写一个简单的游戏引擎  我同意
的答案,你可以先考虑从无到有制作一个小的游戏,然后把小游戏的图形渲染,纹理渲染,资源管理等模块剥离出来。因为游戏引擎和你上层代码的耦合度必须非常的低,这样你以后的引擎更换可以最少地改动你以前的代码。  还有好多,现在想到的只有这么些,我会一直保持更新的。  另外,支持国产游戏引擎,支持西山居么么哒 :)
不要脸地来答这个问题了。。。首先你得会DX或者OpenGL。。。然后你会。。。“我擦!不就初始化个框架么?这么多乱七八糟的预留参数有个JB用!能封装的封装!没什么用的设为默认函数好了。。。”“我擦!弄个摄像机怎么也要这么多参数?!封封封!”“纳尼?材质光照什么的好麻烦、内置几个好了。。。码码码!”“写个DEMO测试下好了、卧槽?这里不应该是这样啊!改改改!”然后你的DEMO代码大概会有这么多:就能跑出这样的程序:就能跑出这样的程序:内部:内部:没错!这就是著名的Irrlicht引擎、(不是我写的)然后再加点粒子系统啦、碰撞检测啦、输入系统啦、动画啦、建议像
说的那样:先用OpenGL或者DirectX制作一个简单的游戏,再把游戏中可复用的部分剥离出来,这就成了一个简单的游戏引擎。因为有很多东西是你在写游戏的过程中才能遇到的、你只要这时才能真正想到什么才是一个引擎需要的、这个过程中你的代码肯定有很多后来加上去的额。。。补丁、可能会有忘了delete的new、很多定义了却没用的变量。。。(不要问我为什么知道、捂脸哭)最后总归一句:技术上十几二十年的差距不是你一个人就能拟补得上的、一味求大求全只会累死自己导致项目夭折(保安!把那个问我为什么的拖出去!)慢慢从一堵墙变成一间房到一层楼再到摩天大楼比较现实、祝好运PS:仅菜鸟一枚、请各位大神轻点打脸。。。虽然我长得不怎么不是。。。
你只能用OpenGL和DX,要写游戏引擎,那只能用DX了。。。。。因为OpenGL只是图形库而已,游戏引擎要有声音吧,要有输入管理吧。。。游戏引擎不是图形库,应该是一套完整可用工具集合,你要简单的嘛。。。。AVG游戏引擎最好写了。。。。。
一般会问这种问题的,通常都没正儿八经写过游戏,甚至都没有用现成的引擎完成过游戏项目我觉得有两种路径1、先别管什么引擎,先按照自己的思路写一些小游戏,2d的,3d的,然后把游戏逐渐变复杂,这个过程中总结一下遇到的困难,以及自己能够想到的解决方案,完善你自己的游戏,提炼可复用的部分。等练得差不多了,可以去看看「游戏引擎架构」这本书,了解一下现代工业水平的引擎大致是怎么做的,对比一下自己的思路。这个时候你自己应该就会有一些想法了。2、用一些现成的工业级引擎做一些小游戏,譬如unity、ue3、ue4,这个过程中要仔细体会引擎为什么要这么设计(特别是工具和工作流的设计),以及具备哪些模块儿,这些模块儿是怎么配合的。然后自己尝试着山寨一下初学者最重要的是理解引擎是什么,能够用来干什么,以及引擎带来的工作流和方法论。实践层面比较好的方法还是山寨,各模块具体的实现没有什么特别的建议,唯多写多想多学习哦对了,写引擎建议经常从一个使用者的角度来思考,要知道真正的引擎,还有设计师和美术在使用,他们可不喜欢只有程序员才能用明白的工具
1、你需要分析出用户的痛点;也就是,opengl和dx是哪些地方让用户使用不方便;2、改进;比如最早的opengl用户要使用一个控件,可能会用画点画线功能来做,也就和你在纸上画一个按钮一样,很麻烦的,而且不容易画好;第一次,你就需要制作一个按钮,但之后每次你都重画的话,是不是很麻烦?于是,你把这个按钮做成模块化的,以后,每次调用这个模块就可以了。3、你在长期的工作中,积累的成千上万的这种功能性模块;把他们放在一起,就是一个引擎的雏形了!4、将调用方法和代码风格统一,让引擎架构适合使用习惯,引擎就慢慢被你搞出来了。。。最后,说着简单,一个引擎的晚上至少需要3年以上,上百个团队的使用和改进,这是一个漫长而且复杂的过程。
你不可能只用D3D或者OpenGL,因为这只是图形而已。游戏引擎最起码还有声音、输入设备。实际上,通常还有网络、脚本系统、物理系统。以上只是一个维度。另一个麻烦的维度是内容创建。对于一个正经的游戏引擎,你不大可能把内容硬编码在程序里,通常都是作为数据读进来。而声音、3D模型等等,在游戏以外是分割开来的,在游戏里是有机关联的。于是,你就需要构建一个内容创建软件,用来编辑、关联游戏内容。这里面最关键的就是:如何把这些东西整合在一起,而这需要实际经验。所以,你最好先制作一些游戏,才有足够的经验去抽象一个引擎出来。
有在写一个小游戏引擎 还是有点发言权的推荐 《游戏引擎架构》Milo Yip大神翻译的如果所有的组件都是自己手写,还是有一定难度的。但是其实难的地方都有库。个人建议先用库,把引擎搭建起来先。然后想学习哪些部分就把那个库干掉,然后手写。OpenGL只有渲染所以还是用DX好些。当然,opengl方便移植到移动端。我觉得Panda3D和pygame这种脚本控制的游戏引擎是一个趋势,所以还需要一些编译器前端的知识。当然也可以用lua或者是Python。游戏引擎包括图像声音资源管理物理等等系统…先占个坑,有电脑了再答。
就那个基于HTML5的网页游戏引擎中的碰撞系统我就研究了半天,还不说比较高级的,这真不是一般的人能做的
已有帐号?
无法登录?
社交帐号登录您所在的位置: &
游戏引擎不仅是代码,更多的是完善的工具
游戏引擎不仅是代码,更多的是完善的工具
麒麟子(Alex)
记得若干年前,在做公司引擎研发的时候,时常会念到的一句话:引擎不仅是代码,更多的是完善的工具。当时只是用这句话还激励自己,找准引擎开发的原则和位置。 而实际上,对这句话的理解甚少。时隔多年,这句话油然在耳,伴随我左右。
从洗脑开始
记得若干年前,在做公司引擎研发的时候,时常会念到的一句话:引擎不仅是代码,更多的是完善的工具。当时只是用这句话还激励自己,找准引擎开发的原则和位置。 而实际上,对这句话的理解甚少。时隔多年,这句话油然在耳,伴随我左右。
后来,引擎项目砍掉了,进入了页游产品的开发。
在这个产品开发的第一周,我们就面临着动画和场景编辑问题,在脑海中第一时间浮现出的,依然是这句话。于是,我们花了两个星期来做了一个简单的动画编辑器 和场景编辑器。动画编辑器只有简单的图片导入,和锚点设置功能(因为怪物大小不一样)。
而场景编辑器,则只有图片导入,怪物摆放功能&&。但正是这两个简陋的编辑器,使我们的项目能够让策划在没有程序的帮助下快速进行关卡相关的内容设计。
这也是第一次,让我感受到,工具能够给项目带来的意义,绝非那两句话可以概括的。
扩展与定制
换了一家公司,是做和帝国时代差不多的开发。这家公司的理念和我是一致的,就是先要开发编辑器,然后再做游戏。
这家公司开发了sprite editor,ai editor,level editor 一切的愿望都是美好的, 而唯一让我觉得神奇的,是ai
editor和level
editor,消耗了大量的时间。同时,内置的许多东西,使得每一次需求变更,都要程序维护相应的editor版本才能达到对应的功能支持。
现来回想起来,如果当初使用配置文件来做一些和需求相关的东西,岂不是更好
上层开发语言
我曾经一度认为,这辈子就靠C++吃饭了。C++这么好的语言,图形和引擎底层都是用C++写的,上层逻辑自然应该用C++写。 并且脚本语言的效率,完全是C++没法比的。
这只是当时的想法,据我所知,成都的逸海情天,在很早的时候,就已经使用 C++底层+JAVA逻辑的开发模式了。
曾经我还笑过这种方案,觉得是一堆不会C++的奇葩货弄出来的玩意儿。当我接触到UNITY3D后,我才发现,C++ +
JAVA的模式,是多么的高大上啊。
C++高效率的特性用在底层无疑是不二之选,但好东西都是一把双刃剑,C++逻辑开发中遇上的各种问题,不是一己之力能够杜绝的。
现在在手机平台上,将脚本作为上层开发语言就更是比比皆是了。
原因就是那让人神往的IOS。为了游戏能够在游戏中进行更新,不得不采用脚本作为逻辑开发。这也使得引擎使用C++底层+脚本逻辑走上了正轨。
而实际上,早期的许多公司或者引擎也是这样做的。比如torque,unreal等
发布与布署
在端游的时代,发布和布署可能并没有受到在大的重视,只要编译好,放到适合的位置就可以了。
而随着页游联运的兴起,发布和布署的成本就随之提升了,因为会针对不同的运营商做一些功能定制,若为每个运营商开发一分支,维护起来成本就更高了。因此我 们选择在同分支下做处理,而将运营商相关的东西做一些标志,根据不同运行商进行加载。 这都还不是终点,在一定程度上,我们可以解决问题。
随着手游的兴起,先不说杂七杂八的国内ANDROID平台,首先面对IOS和ANDROID系统,我们的引擎就需要针对性地做一些优化处理。拿图片处理为 例,在IOS上,通常使用PVRTC 4bp格式,而在ANDROID上,则使用ETC。
如果两个版本做不同分支,就更不科学了。因此,我们需要做一些脚本化的东西,使我们的资源可以在发布前,打包或者转化为目标平台可识别的资源。
因此,在这个地方,SHELL工具,又变得不可缺少了,而不仅仅是给策划和美术使用的编辑器
Shell与python
很多时候,我们使用shell就可以搞定许多问题,但是,python作为一个强大的脚本语言,它提供的各种工具库不是shell能比拟的,比如文件搜 索,MD5生成,图片处理等等。
更让shell不能比的是,python是跨平台的,这就让我们在MAC,LINUX和WINDOWS上,可以复用我们写好的工具。
而shell则只需要做一些简单的平台权限相关的操作。 如果使用python能够搞定的,我们尽量使用它。
因为手机游戏的开发,很多时候MAC与windows都有需求。&
虽然从来没有使用过这货开发项目,但自从2011引擎项目砍掉后,我就一直关注它,研究它。一开始,我对它的做法是很不接受的,觉得将一个引擎与工具绑定得如此 紧密,导致我在调试程序的时候,还要启动UNITY3D的IDE,是一件很不爽的事情。 很有早期使用FLASH CS来开发FLASH游戏的感觉。
一直期待UNITY3D能够像FLASH BUILDER一样,出一个纯代码的开发环境。
但后来发现,UNITY3D之所以强大,正是因为它的编辑器,而不是他那高端的组件化设计。
一个纯组件化设计的引擎,如果没有一个好的工具配合,是很难发挥效果的,甚至会多写许多代码。而组件式这种巧妙的设计,居然能够将编辑器与项目需求解耦。
也让我刷新了引擎架构方面的认知-----引擎除了工具和渲染,良好的上层结构依然重要。&
Mono平台的引入,虽然使UNITY3D发出的包略大,同时在CPU较低的机型上很吃力以外,没有任何不好的地方。许多人吐槽这东西,但我觉得,大家应该承认时代的变迁。
Unity3d的2D支持引入虽然过晚,但充分说明Unity3d对2D方面的势头,虽然重型的MONO平台使得即使是2D游戏,也带来一定的开销,但我觉得,在保证产品稳定,快速迭代等前提下,少兼容一定量的低端设备,也是允许的。&
要说影响中国游戏开发界的开源引擎,除了早期名噪一时的OGRE,如今就只有它了。 许多人说它的架构很2,许多人说他其实就是一个山寨货,
许多人说他自己花点时间就能写出来。 这些人的对与错我们不讨论了,我们来看市场占有率。 或许这样你会说很俗。 但一个东西存在即是合理的。
一个引擎,能够满足你的项目开发需求,同时为你省下大把时间,你有多少理由不使用它? 而非要自己去DIY一个蹩脚的引擎,
你觉得你写出来的东西,坑就一定比别人少吗?
3.x版本的cocos2d-x已经与往日不同了,我很高兴能够看到cocos2d-x在代码结构方面的革新。(不仅仅是去掉了CC前缀)
cocostudio虽然还是一个半残品,但不得不说,触控官方出力开发一个商业级的编辑器,这在开源项目中还是很少见的。大家应该给它时间成长。
而在成长期间,还是用最适合的方案来构建自己的项目吧。试想,在cocostudio出现之前,也有无数的成功案例。
这是我曾经最喜欢的引擎,它伴随着我渡过了大学生活,我在寝室里,时常阅读它的代码和注释,虽然没有特别的收获(因为完全看不明白),却使我保持了对引擎的热情。
Nicko为这个引擎开发了一个irrEdit,但随时时间的推移,这个东西已经不更新了,因为nicko发现,irrlicht没啥意 思,irrEdit和irrKlang收益又不多。于是转而投入一superCube的开发。supercube卖得还挺贵的,支持 flash,html5,android app,ios app,windows exe等发布。
功能和特性都挺NB,但是界面和实际的功能,真的好像小朋友做的。 有兴趣的朋友可以试试
这是我接触的第二个引擎,它的庞大使我望而怯步。有幸在研发过程中,研究过天龙八部的代码,以及它的材质系统。
整个东西都挺OK的,而美中不足的是它就像一个仓库,什么都往里塞,而很多东西,也是停留在学术层次,如果想投入项目,还得自己改造一番。 cocos2dx可以说是很直接的了(有人说是因为2D很简单,但我觉得,是因为cocos2dx定位很明确,或者说,是因为cocos2d的定位很明 确)。 OGRE也没有附带编辑器。
而早期的项目,都不是基于UNITY3D那种解耦方式,许多都是为特定类型的游戏定制编辑器。我研究过大唐,神咒,天机,以及刚刚说的天龙八部的代码和编辑器,都是为MMORPG定制的,且直接关联游戏内容。 这或许就是当时的引擎发展层次吧。
这是一个由Irrlicht发展而来的引擎,核心部分虽然有较多扩展,性能和特性也是Irrlicht不可同日而语的,但核心部分依然保持了 IRRLICHT的风格。
唯一不同的是,上层逻辑开发的模式,与UNITY3D如出一辙,这也是让我想到了,任何引擎,都可以慢慢的向UNITY3D的逻辑开发方式靠齐,包括 cocos2dx,更甚至是ogre。glitch由于是内部使用引擎,工具也是自家定制的,但工具的设计思路,也和unity3d颇为相似。这一点可以 说是让我十分欣赏。
时代在发展,行业在进步,我们必须跟上大众的步伐,才能在这无硝烟的战争中,赢得属于自己的那一仗...【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
本书是Android初学者的最佳入门书。全书由浅入深、系统全面地讲
既然强大的Android Studio来了,有什么理由不去用呢?
讲师: 24人学习过讲师: 68人学习过讲师: 133人学习过
Docker是一个轻量级虚拟机,也是一种Linux容器,它突
苹果在2014WWDC上发布的新编程语言Swift相信牵动着大
在Android应用程序中,可以配置Activity以四种方式来
信息安全风险评估理论研究日趋成熟,相关资料比较充分,但有关评估实际工作的参考资料很少。本书以信息安全风险评估实践为基础,
Windows Phone专家
Android开发专家
51CTO旗下网站查看: 27344|回复: 463
【9秒原创自研】Dgame3D——开源3D网页游戏引擎 完整源码 V1.0
在线时间 小时
1.压缩包内容:
1. 文档介绍
2. 完整源码包
2.资源介绍:
创建一个主类
public class Main extends Sprite
在构造函数中监听舞台的初始化
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
在init函数中创建Context3D
创建成功会有一个回调事件,在事件中创建dGame3DSystem,创建一个游戏类Game,最后再创建一个timer用于游戏类的主循环dGame3DSystem.CreateContext3D( stage , function( context3D:Object ):void
{
& & & & m_pdGame3D = new dGame3DSystem( context3D );
& & & & m_pdGame3D.SetScreenSize( stage.stageWidth , stage.stageHeight );
& & & & m_pGame = new Game( m_pdGame3D , stage );
& & & & var pTimer:dTimer = new dTimer();
& & & & pTimer.Create( 0 , 0 , function( p:dTimer , nRepeat:int ):void
& & & & {
& & & & & & & & if ( m_pdGame3D )
& & & & & & & & {
& & & & & & & & & & & & EnterFrameMove();
& & & & & & & & }
& & & & } );
} );
在EnterFrameMove函数中调用Present函数
public function EnterFrameMove():void
{
& & & & m_pGame.EnterFrameMove();
& & & & m_pdGame3D.Present();
}
复制代码游戏类中可以初始化摄像机位置,创建场景,创建模型,创建人物。
关于摄像机的函数有
设置眼睛坐标
public function SetCameraEye( vEye:dVector3 ):void
设置目标点坐标
public function SetCameraLookat( vLookat:dVector3 ):void
设置上方向坐标
public function SetCameraUpVec( vUpVec:dVector3 ):void
获得眼睛坐标
public function GetCameraEye():dVector3
获得目标点坐标
public function GetCameraLookat():dVector3
获得上方向坐标
public function GetCameraUpVec():dVector3
获得摄像机方向
public function GetCameraDir():dVector3
获得摄像机方向与上方向的叉积
public function GetCameraCross():dVector3
设置最近裁剪面
public function SetCameraNearPlane( fNear:Number ):void
设置最远裁剪面
public function SetCameraFarPlane( fFar:Number ):void
获得最近裁剪面
public function GetCameraNearPlane():Number
获得最远裁剪面
public function GetCameraFarPlane():Number
设置摄像机眼睛绕目标点横向旋转角度
public function SetCameraRotationH( angle:Number ):void
设置摄像机眼睛绕目标点纵向旋转角度
public function SetCameraRotationV( angle:Number ):void
获得摄像机眼睛绕目标点横向旋转角度
public function GetCameraRotationH():Number
获得摄像机眼睛绕目标点纵向旋转角度
public function GetCameraRotationV():Number
设置摄像机眼睛与目标点的距离
public function SetCameraRotationRadio( length:Number ):void
获得摄像机眼睛与目标点的距离
public function GetCameraRotationRadio():Number
设置摄像机眼睛与目标点距离的最小,最大范围
public function SetCameraRotationRadioLimit( fNear:Number , fFar:Number ):void
设置摄像机向前移动(沿目标点方向)
public function SetCameraMoveForword( speed:Number ):void
设置摄像机向后移动
public function SetCameraMoveBack( speed:Number ):void
减少摄像机眼睛与目标点的距离
public function SetCameraMoveNear( speed:Number ):void
增加摄像机眼睛与目标点的距离
public function SetCameraMoveFar( speed:Number ):void
设置摄像机向左移动,(沿目标点方向与上方向的叉积方向)
public function SetCameraMoveLeft( speed:Number ):void
设置摄像机向右移动
public function SetCameraMoveRight( speed:Number ):void
设置摄像机目标点与眼睛的横向和纵向角度
public function SetCameraRotationLookat( angleH:Number , angleV:Number ):void
设置摄像机宽高比
public function SetCameraAspect( f:Number ):void
获得摄像机视矩阵
public function GetCameraView():dMatrix
获得摄像机投影矩阵
public function GetCameraProj():dMatrix
获得摄像机视投影相乘矩阵
public function GetCameraViewProj():dMatrix
设置摄像机正交投影宽高
public function SetCameraOrthoSize( width:Number , height:Number ):void
获得摄像机正交投影宽
public function GetCameraOrthoWidth():Number
获得摄像机正交投影高
public function GetCameraOrthoHeight():Number
设置摄像机透视类型,0为透视,1为正交
public function SetCameraPerspectiveType( nType:int ):void
获得摄像机透视类型
public function GetCameraPespectiveType():int
设置摄像机是否与地面碰撞
public function SetCameraCollection( bColl:Boolean ):void
获得摄像机是否与地面碰撞
public function GetCameraCollection():Boolean
场景相关函数有:
public function CreateScene( width:int , height:int ):void
public function SaveScene():ByteArray
public function LoadSceneFromBin( data:ByteArray , onLoadComplate:Function , nFlag:int = 0 ):void
从文件中读取场景
public function LoadSceneFromFile( strFileName:String , onLoadComplate:Function , nFlag:int = 0 , onLoadProgress:Function = null ):void
获得场景文件名
public function GetSceneFileName():String
设置天空盒贴图文件
public function SetSkyboxTextureFileName( strFileName:String ):void
public function UpdateScene( nFlag:int = 0 ):void
设置场景是否有碰撞
public function SetShowCanReach( bShow:Boolean ):void
public function CreateMeshObj( strFileName:String ):int
public function CreateEffectObj( strFileName:String , bPlayEndAutoDelete:Boolean = false ):int
public function CreateCharacter( strFileName:String = null , pColorTransform:dColorTransform = null ):int
public function CreateOcean( vPos:dVector3 ):int
public function CreateObjCopy( id:int ):int
public function DeleteRenderObj( id:int ):void
设置物体是否显示
public function SetObjShow( id:int , bShow:int ):void
获得物体是否显示
public function GetObjShow( id:int ):int
设置物体坐标
public function SetObjPos( id:int , vPos:dVector3 ):void
获得物体坐标
public function GetObjPos( id:int ):dVector3
设置物体高度偏移
public function SetObjYOffset( id:int , fY:Number ):void
获得物体高度偏移
public function GetObjYOffset( id:int ):Number
设置物体缩放
public function SetObjSca( id:int , vSca:dVector3 ):void
获得物体缩放
public function GetObjSca( id:int ):dVector3
设置物体旋转
public function SetObjRot( id:int , vRot:dVector4 ):void
设置物体Y轴旋转
public function SetObjRotY( id:int , angle:Number ):void
获得物体旋转
public function GetObjRot( id:int ):dVector4
获得物体Y轴旋转
public function GetObjRotY( id:int ):Number
设置物体2维方向
public function SetObjDir2( id:int , x:Number , z:Number ):void
获得物体2维方向
public function GetObjDir2( id:int ):dVector2
获得物体类型
public function GetObjType( id:int ):int
获得物体文件名
public function GetObjFileName( id:int ):String
获得物体列表
public function GetObjList( nObjType:int ):Vector.&int&
获得物体绑定盒
public function GetObjBoundingBox( id:int ):dBoundingBox
获得物体AABB
public function GetObjAABB( id:int ):dBoundingBox
获得物体世界矩阵
public function GetObjWorldMatrix( id:int ):dMatrix
设置物体是否接收鼠标
public function SetObjHandleMouse( id:int , bHandle:Boolean ):void
获得物体是否接收鼠标
public function GetObjHandleMouse( id:int ):Boolean
给定点获得场景地形高度
public function GetSceneHeight( x:Number , z:Number ):Number
获得场景地形大小
public function GetSceneSizeX():int
获得场景地形大小
public function GetSceneSizeZ():int
重设场景大小
public function ResizeScene( newWidth:int , newHeight:int , onComplateFun:Function ):void
获得全局光照
public function GetGlobalLightDir():dVector3
设置全局光照
public function SetGlobalLightDir( vDir:dVector3 ):void
获得场景文件列表
public function GetSceneObjFileNameList():Vector.&String&
获得场景文件中物体列表
public function GetSceneStaticCharacter():Vector.&dSceneStaticCharacter&
场景与直线碰撞
public function CheckCollectionRay( vPos:dVector3 , vDir:dVector3 , vPosOut:dVector3 = null , nObjType:int = RENDEROBJ_TYPE_ALL ):int
场景与鼠标碰撞
public function CheckCollectionMousePt( x:int , y:int , nWindowWidth:int , nWindowHeight:int , vPosOut:dVector3 = null , nObjType:int = RENDEROBJ_TYPE_ALL ):int
设置是否显示地形
public function SetShowTerrain( bShow:Boolean ):void
获得是否显示地形
public function isShowTerrain():Boolean
角色相关函数有:
获得当前鼠标选中的角色
public function GetMousePassCharacterID():int
角色添加装备模型
public function CharacterAddPartMesh( id:int , strPartName:String , strFileName:String ,
& & & & strBoundingBonePartName:String = null , strBoundingBoneCharactorName:String = null , pColorTransform:dColorTransform = null ):void
角色添加动作
public function CharacterAddAnimationKey( id:int , strKeyName:String , strFileName:String , bCanMove:int = 1 , bAddToHorse:Boolean = false , onLoadComplate:Function = null ):void
设置角色动作属性
public function CharacterSetAnimationKeyDeclare( id:int , strKeyName:String , nStartTime:int , nLoopStartTime:int , nLoopEndTime:int ):void
设置物体在场景切换时不被删除
public function SetObjNoDelete( id:int , bNoDelete:Boolean ):void
设置人物坐骑
public function CharacterSetHorse( id:int , strHorseFileName:String , strHorseBoneName:String = &EQ-Horse& , strChatarctorBoneName:String = &EQ-Ride& ):void
播放人物动作
public function CharacterSetCurrentKey( id:int , strKeyName:String ):void
获得当前人物播放动作
public function CharacterGetCurrentKey( id:int ):String
获得人物动作最大播放时间
public function CharacterGetKeyMaxTime( id:int , strAniName:String ):int
设置人物移动和站立里的默认动作
public function CharacterSetRunAniName( id:int , strRunAniName:String , strStandAniName:String ):void
人物向给定方向移动
public function CharacterMoveDir( id:int , vDir:dVector3 ):void
人物向给定目标点移动
public function CharacterMoveTarget( id:int , vTarget:dVector3 , bSearchPath:Boolean = false , bCheckCollection:Boolean = false , moveEndFun:Function = null , fIgnoreLength:Number = 0.0 ):int
人物停止移动
public function CharacterStopMove( id:int ):void
设置人物移动速度
public function CharacterSetMoveSpeed( id:int , fSpeed:Number ):void
获得人物移动速度
public function CharacterGetMoveSpeed( id:int ):Number
获得人物是否正在移动中
public function CharacterIsRunning( id:int ):Boolean
设置人物名称
public function CharacterSetName( id:int , strName:String ):void
获得人物名称
public function CharacterGetName( id:int ):String
添加人物头上的数字
public function CharacterAddBNumber( id:int , list:Vector.&int& , nPlayType:int = BNUNBER_PLAY_JUMP ):void
public function CharacterAddEffect( id:int , strEffectName:String , strHitEffectName:String , vStartPos:dVector3 , nBoneHero:int , strStartBoneName:String , nStartTime:int = 0 , fFlySpeed:Number = 10.0 ):void
设置人物2维方向
public function CharacterSetObjDir2( id:int , nTargetID:int ):void
获得人物骨骼坐标
public function CharacterGetBonePos( id:int , strBoneName:String ):dVector3
下载地址:
游客,如果您要查看本帖隐藏内容请
本帖子中包含更多资源
才可以下载或查看,没有帐号?
打赏列表共打赏了0次
还木有人打赏~
在线时间 小时
9秒你太厉害了!
在线时间 小时
哇,好像很不错的样子啊
在线时间 小时
新玩具出来了,赞一个,可惜不是AS控
在线时间 小时
不错,这个好
在线时间 小时
have a look
在线时间 小时
在线时间 小时
在线时间 小时
感觉不错,看看
在线时间 小时
赞啊,好东西,谢谢分享&&。
帮助微信开发者公众号实现盈利..
想做本地O2O社区的可以拿去!!公益了!!!!
《搞基三国》是一款三国题材的RPG类手机网游。游
特别声明(务必查看!)
1、微擎模块《模拟群
微信广告植入源码 微信弹窗广告源码朋友圈广告植
夜深人静,撸了一晚上,睡不着觉,刚刚看完《釜
| 联系方式
COPYRIGHT(C)2015 ZHONGQINGLONGTU NETWORK CO.LTD ALL RIGHTS RESERVED.ICP备号-4
北京中清龙图网络技术有限公司

我要回帖

更多关于 老滚5装备代码 的文章

 

随机推荐