- 博客(13)
- 资源 (44)
- 收藏
- 关注
原创 第二人生的源码分析(111)脚本的综合分析(1)
当语法分析一个脚本完成时,那么就会把整个脚本的分析结果保存起来,在第二人生里把脚本的结果保存到那里呢?现在就来分析这个问题,先来看看语法分析的文件里,有如下的代码:#001 case 3:#002 #line 277 "indra.y"#003 {#004 (yyval.script) = new LLScriptScript(NULL, (
2008-07-29 21:37:00 3974
原创 第二人生的源码分析(110)脚本的语法分析(5)
在脚本里有很多语句组成的,那么对于语句又是怎么进行语法分析的呢?下面就来分析for语句的分析过程,它的声明代码如下:#001 class LLScriptFor : public LLScriptStatement#002 {#003 public: 构造函数,输入保存的值。#004 LLScriptFor(S32 line, S32 col, LLSc
2008-07-27 19:52:00 3556
原创 第二人生的源码分析(109)脚本的语法分析(3)
下面来详细地分析语法分析相关的类,以便了解整个语法分析的过程和细节,这样也方便地复用第二人生里的脚本编译器,达到源码复用的目标。先来分析类LLScriptFilePosition,它的声明代码如下:#001 class LLScriptFilePosition#002 {#003 public: 构造函数,保存脚本所在的行号和列号。#004 LLScr
2008-07-24 21:52:00 3628 2
原创 第二人生的源码分析(108)脚本的语法分析(1)
当玩家书写一个脚本时,如果写错了脚本,那么肯定运行不了。现在就来分析怎么样确保脚本是正确的问题,如果不正确就需要显示出来那里不正确。脚本是否正确,其实是根据脚本的语法来判断的。那么又怎么样来构造语法分析的程序呢?在第二人生里是通过使用程序bison.exe来创建的。 下面先来看看bison.exe是做什么东西的:Yacc 代表 Yet Another Compiler Compiler
2008-07-21 00:22:00 3552
原创 第二人生的源码分析(107)脚本的词法分析(5)
前面分析词法分析的代码生成,并且生成可编译的C++文件,那么它是怎么调用这个词法分析文件的呢?下面就来了解它的调用过程。当你在第二人生里创建物体后,就可以编辑脚本了,当完成脚本编写之后就需要保存起来,这时就会触发脚本编译。它就如下调用:#001 void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
2008-07-17 22:32:00 3129 1
原创 第二人生的源码分析(106)脚本的词法分析(4)
前面介绍了flex文件的格式,那么flex程序又把这个文件生成怎么样的文件呢?下面就来仔细分析这个文件,由于flex程序生成C++的文件格式,那么就需要C++的编译器才可以编译了。它的代码如下:#001 #line 2 "lex_yy.cpp"这行是行号同步使用。 #002 /* A lexical scanner generated by flex */#003
2008-07-15 23:35:00 3222
原创 第二人生的源码分析(105)脚本的词法分析(3)
下面来分析flex文件的最后一部份,就是辅助代码部份,这部份代码是原封不动地拷贝到生成的文件里。它的代码如下:#001 %%这个双百分号开始,就表示flex文件的第三部分开始了。 #002 #003 LLScriptAllocationManager *gAllocationManager;定义分配管理器指针。 #004 LLScriptScript
2008-07-13 21:20:00 3505
原创 第二人生的源码分析(104)脚本的词法分析(2)
接着上一次,再来分析flex文件的下一部份:规则部份。它们由一连串带有代码的正则表达式组成,当匹配相对应的正则表达式时,这些代码就会被运行。下面就一段规则的代码:#001 %%这行表示规则代码开始。 #002 "//" { gInternalLine++; gInternalColumn = 0; comment(); }这里使用“//”来表
2008-07-11 22:25:00 3136
原创 第二人生的源码分析(103)脚本的词法分析(1)
从前面的脚本可以看到它的代码,也理解它的意思了,但是它是怎么样执行的呢?又是怎么样变成可执行的脚本呢?下面就来分析这部份相关的代码。要了解脚本执行,就得把脚本中的每一个单词识别出来,如下: default { state_entry() { llSay(0, “Hello, Avatar!”);
2008-07-10 22:32:00 4228
原创 第二人生的源码分析(102)脚本的构造
前面我们学习怎么样打开窗口来创建脚本,接着下来就需要知道这些脚本是做什么用的,这样最终才会按它的语义来正确地执行起来。现在我们能够查看脚本的内容: default{ state_entry() { llSay(0, “Hello, Avatar!”); }
2008-07-07 22:10:00 3555
原创 第二人生的源码分析(101)脚本的初步知识
哲学里说,世界是永远在运动的。那么在现实中人们对软件的需求是永远在变化的,为了对付这种不断变化的需求,有什么好方法吗?难道还是像过去一样,每一个需求都是发布一个版本来解决?随着市场竞争的激烈化,满足每一个用户个性化需求,就需要考虑一种办法让用户自己去改变的游戏世界里的东西了。在第二人生里,就引入了脚本语言来解决不同用户的需求的变化,而不必重新发布新程序。有了脚本系统之后,用户想创建一个飞机在游戏里
2008-07-04 20:00:00 3267
原创 第二人生的源码分析(100)雷达地图详细显示
前面已经介绍雷达地图的类声明,现在就来仔细分析一下雷达地图是怎么样显示出来的。雷达地图显示函数LLNetMap::draw代码如下:#001 void LLNetMap::draw()#002 {#003 static LLFrameTimer map_timer;#004 判断是否显示雷达地图。#005 if (!getVisible() || !gWo
2008-07-02 21:00:00 4964 3
原创 第二人生的源码分析(九十九)雷达地图的实现
无论是在2D的游戏里,还是在3D的游戏里,雷达地图的实现,都是比较基本的功能了。因为随着游戏世界里越来越大,参加的玩家也越来越多,需要一个大体的地图来让玩家方便地看到全局的概貌。比如在打对战的游戏里,更加需要了解别人在那里战斗了。有了雷达地图之后,就可以让玩家更加方便地了解全局地图上发生的事情,也方便玩家相互查找,也让玩家不会走迷路。下面就来了解第二生里的怎么样实现雷达地图的实现,它的显示界面如下
2008-07-01 21:30:00 5189
python抓取天气并分析 实例源码
2017-08-28
书《深度学习》
2017-03-13
国产8051模拟器
2016-09-10
tinyxml2配套源码
2016-06-27
selenium的浏览器驱动
2016-06-14
开源鸿蒙4.0不能进入桌面的补丁
2024-03-17
开源鸿蒙 4.0 RK3566开发板配置
2024-03-17
svm_hog_data.rar
2020-03-02
实现numpy的C++库扩展
2019-11-24
python web py入门配套源代码
2018-02-23
webpy演示例子1
2018-02-21
胶囊模型的代码
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人