本帖最后由 蓝烟清 于 2011-9-29 00:07 编辑
战斗的特效先放一放,因为真正的特效必须要等S大进一步公布源码才能完美实现。先学习一些基础
这一次讲的是对话框
对话框函数常用的有三个,分别为Talk, TalkEx, say
第一部分:简单的运用
1、Talk(s, pid);
这个是最简单的对话框调用方式,如果pid传的是主角,那么对头像在右下角;如果不是pid不是主角,头像是在左上角
其实内部是调用TalkEx,主角flag=0, 非主角是flag=1
例子:
Talk("测试Talk",0);
2、TalkEx(s,pid,flag)
TalkEx函数作用是弹出对话框,s是内容,pid是人物的编号
flag 取值范围0-5, 0左上角,1右下角,2无头像,3和1一样,4右上角,5左下角
例子:
TalkEx("测试TalkEx",0,4);
3、say(s,pid,flag,name)
更复杂的对话,name是对话时显示的名字,前面两个是不显示名字的
就是多了名字,其它参数和TalkEx一样的
例子:
say("测试TalkEx",0,4,"主角");
第二部分,进阶使用
功能在上面部分已经说明了,下面部分说的是编程思想
上面的对话框都是带字符串,像上面这么用,从功能上来讲完全没问题,但是维护和扩展性极其的差。
举个例子说:现在用的是简体版,如果哪天你需要发布繁体版,你修改的方式将会是打开源码,一个一个的找出对话内容,再修改,这工作可不是这么容易做的,这种细活如果万一不小心把什么内容给错改了,那你就完蛋了。
专业的名词叫语言国际化,也叫i18n。要解决这样的问题,就必须把对话的内容独立出来,放在一个专门的文件,然后在对话时再调用。当需要修改的时候,只需要对这个文件进行修改就可以了。
新建一个文件Talk_File.lua,把内容放进去,在DIY.lua文件加载此文件
CC.MyTalk1 = "测试Talk";
CC.MyTalk2 = "测试TalkEx";
CC.MyTalk3 = "测试say";
调用的时候就可以say(CC.MyTalk3,0,4,"主角");
第三部分,高级使用
还有更理想的定义,但是需要更多的lua编程知识
新建一个Talk_File_Ex.txt文件(注意是txt,其实lua也可以,只是为了更好和上面的区别)
输入内容如下:
1,"测试Talk"
2,"测试TalkEx"
3,"测试say"
因为是txt文件,就不可以用DIY.lua来加载了,需要自己去解析自己的文件(其实文件用二进制更好,呵呵)
定义对话的全局变量和一个解析的函数
- CC.MyTalkEx = {}; --定义对话的全局变量
- local function Load_Talk_file(filename) --定义函数
- local fr=io.open(filename,"r"); --用r方式打开文件
- if fr==nil then --如果打开失败返回-1
- return -1;
- end
-
- local line = "";
- while true do
- line = fr:read(); --按行读取文件
- if line == nil then --读到末行就退出循环
- break;
- end
- if string.find(line,",") and string.sub(line,1,1) ~= "#" then --想了一下,还是加上空行和#注释的判断。本来还两边空格应该去掉的,但是lua实在函数少。
- local i = string.sub(line,1,string.find(line,",")-1); --按,分割。 话说lua没有split函数,囧
- local s = string.sub(line,string.find(line,",")+1,-1);
- CC.MyTalkEx[tonumber(i)] = s; --保存到对话数组
- end
- end
-
- io.close(fr);
- end
- --使用
- Load_Talk_file(".\\script\\MyDIY\\Talk_File_Ex.txt");
- Talk(CC.MyTalkEx[1],0);
复制代码 三部分理解难度越来越大,推荐第二种。编程习惯是从一点一滴积累的,第一种不推荐使用,看起来直观,但是运用到程序中是非常不好的。
第三部分对于真的做一个MOD游戏,这种思想我觉得还是必须学会的,把对话的内容做为资源文件独立出来,这样更容易编辑你的资源而不影响主程序。
加载多个文件,特别需要注意加载的顺序
下载附件:
|