铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 1396|回复: 1

对话框学习

[复制链接]
发表于 2011-9-28 23:29 | 显示全部楼层 |阅读模式
本帖最后由 蓝烟清 于 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来加载了,需要自己去解析自己的文件(其实文件用二进制更好,呵呵)
定义对话的全局变量和一个解析的函数

  1. CC.MyTalkEx = {};                --定义对话的全局变量
  2. local function Load_Talk_file(filename)                        --定义函数
  3.         local fr=io.open(filename,"r");                        --用r方式打开文件
  4.         if fr==nil then                --如果打开失败返回-1
  5.                         return -1;
  6.         end
  7.         
  8.         local line = "";
  9.         while true do                        
  10.                 line = fr:read();                --按行读取文件
  11.                 if line == nil then                --读到末行就退出循环
  12.                         break;
  13.                 end
  14.                 if string.find(line,",") and string.sub(line,1,1) ~= "#" then                        --想了一下,还是加上空行和#注释的判断。本来还两边空格应该去掉的,但是lua实在函数少。
  15.                         local i = string.sub(line,1,string.find(line,",")-1);                --按,分割。 话说lua没有split函数,囧
  16.                         local s = string.sub(line,string.find(line,",")+1,-1);
  17.                         CC.MyTalkEx[tonumber(i)] = s;                --保存到对话数组
  18.                 end
  19.         end
  20.         
  21.         io.close(fr);
  22. end

  23. --使用
  24. Load_Talk_file(".\\script\\MyDIY\\Talk_File_Ex.txt");
  25. Talk(CC.MyTalkEx[1],0);
复制代码
三部分理解难度越来越大,推荐第二种。编程习惯是从一点一滴积累的,第一种不推荐使用,看起来直观,但是运用到程序中是非常不好的。
第三部分对于真的做一个MOD游戏,这种思想我觉得还是必须学会的,把对话的内容做为资源文件独立出来,这样更容易编辑你的资源而不影响主程序。


加载多个文件,特别需要注意加载的顺序
下载附件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2011-9-29 10:28 | 显示全部楼层
哇,楼主的DIY专题系列讲座!期待变成一个合集,我等菜鸟好好学习!

点评

呵呵,专题已经着手准备了。刚才发了第一讲。以后一起学习  发表于 2011-9-29 11:10
呃,卡了……  发表于 2011-9-29 10:32
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-22 07:14

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表