找回密码
 点一下
查看: 2026|回复: 11

你们做触发器的时候使用什么样的结构?

[复制链接]
发表于 2011-6-2 22:58:52 | 显示全部楼层 |阅读模式
最近在做地图,资料部分已经做的差不多了,开始写触发。

遇到一个很讨厌的问题就是做故事剧情时候的延时触发问题。

如果是对抗类的地图,只用设置周期性刷怪就行了。
如果是TD类地图,周期性调用刷怪函数,并加入下一波次开关,初始化每波次怪物列表就行了。
一般的地图只用周期性刷怪就行了。

问题是我现在做的是剧情类地图,有很频繁的剧情事件,间隔几秒就得进行剧情,发送对话信息,动画,镜头转换,怪物刷新,NPC指令,修改任务目标。
有什么比较常用且合理的结构来进行这种剧情模式的触发么?

目前我的做法是弄一个计时器,触发这个计时器到时事件。
设置一个全局变量a
然后在动作里面用if语句判断a的值,如果满足则执行此时设定的动作,并在动作完成后设置新的计时器时间,设置a=a+1,并忽略后续动作返回。


问题是动作多了后,这个触发会很长……可读性很差……
特别死执行剧情对话的时候,必须间隔几秒输出文字,会频繁的使用设置计时器,跳出触发器,再次触发,检验条件……
代码很繁琐……
(不设置延时,剧情对白就会一次全刷屏幕上……)

有没有语句直接让触发器原地等待一段时间,然后继续执行后续的语句?

另外,有没有更好的方法输出剧情对白?我现在用的是:使用者界面,输出文字,不够美观,也不能做到Dialog:Label的打印出来的效果。

有谁擅长做剧情脚本的给我点建议,谢谢!
发表于 2011-6-2 23:16:49 | 显示全部楼层
好像有个触发器队列的东西

输出文字什么的可能去参考一下战役地图比较好
回复

使用道具 举报

发表于 2011-6-2 23:43:52 | 显示全部楼层
每几秒就有一次剧情?好吧你赢了
回复

使用道具 举报

发表于 2011-6-2 23:45:18 | 显示全部楼层
设置延迟可以用Wait函数的,那个字幕看了战役好像是用标签对话框项的。
回复

使用道具 举报

 楼主| 发表于 2011-6-3 02:12:25 | 显示全部楼层
引用第2楼沧海流星于2011-06-02 23:43发表的  :
每几秒就有一次剧情?好吧你赢了
比如说两个角色的对话应答……
A说:XXXXXX
B说:XXXX
A说:XXXXX

自然不能让这三行一瞬间全刷出来吧,至少要等个几秒钟,最好还配上通讯的提示音之类的。
另外那个队列是什么?怎么用?


另外wait函数是触发器的那个wait么?我先研究下。
回复

使用道具 举报

发表于 2011-6-3 05:01:57 | 显示全部楼层
  雖然不是很明白,但是從你的描述來看,你所謂「這個觸發會很長」,但實際上,它「長」的東西都是相似的吧?那麼你可以把相似的動作定義成一個自定動作,而把有差異性的地方設定成參數。

  如此,一來可以提高可讀性,二來可以規範化(你可以把這動作想像成一般程式設計所用的函式或子程式)。
回复

使用道具 举报

发表于 2011-6-3 08:28:17 | 显示全部楼层
如果仅仅是对白
很简单,循环,等待时间放到一个数组里
对话内容放到一个数组里,然后拨即可了

如果有人物动作,那么最好一点点的执行了
这个可以写一排触发器,然后依据条件执行就好了
回复

使用道具 举报

发表于 2011-6-3 09:58:59 | 显示全部楼层
可以把对白存储为变量,全部放在数据初始化里,这样触发看起来就会简洁一点了,而且更改起来也会方便得多
回复

使用道具 举报

 楼主| 发表于 2011-6-3 10:16:26 | 显示全部楼层
引用第5楼风凌正于2011-06-03 05:01发表的  :
  雖然不是很明白,但是從你的描述來看,你所謂「這個觸發會很長」,但實際上,它「長」的東西都是相似的吧?那麼你可以把相似的動作定義成一個自定動作,而把有差異性的地方設定成參數。

  如此,一來可以提高可讀性,二來可以規範化(你可以把這動作想像成一般程式設計所用的函式或子程式)。
我现在问的结构,就是你们如何做剧情类的自定义动作。

例如,将对白,刷怪,下达命令分别做成几个动作,在初始化的时候给上值。
将是对以上动作,动作需要的参数初始化,例如对白内容,刷怪数量,地点,攻击命令的目标,对应的序号等。
然后在主要函数中用循环语句递增调用这些函数。



还有一种做法我觉得应该是触发器的错误用法。
就是触发A动作完之后开启触发器B,触发器B动作完之后开启触发器C……
回复

使用道具 举报

发表于 2011-6-3 16:15:07 | 显示全部楼层
其实你把几个问题混合在一起了

1. 间隔几秒输出文字
这个可以用等待动作来解决,不用跳出去再用计时器跳回来
如果你有大量输出文字动作,可以自定义一个输出文字函数,里面是输出+暂停,可以增加代码可读性。

2. 有没有更好的方法输出剧情对白
可以用transmission,而且transmission内置等待功能。

3.有什么比较常用且合理的结构来进行这种剧情模式的触发
每一个剧情发展就创建一个触发,而不是用计时器和变量,把动作堆在一个触发里。
这是因为当你的地图做的比较完善的时候,剧情发展不会是只有一条路线,只按照计时器时间发生的剧情会非常闷。
当每一个剧情都是一个触发,一方面代码方便管理和维护,也方便用不同事件触发剧情,增加地图互动性,因为剧情类地图的互动性是很重要的。

至于创建很多触发以后,怎么用计时器触发,这个其实不难,当然不是叫你用大量等待+运行触发,而是用数组记录触发,然后定时运行,这种做法还有个好处,就是剧情的次序可以动态修改,更改数组内部排序就是了,不过当然需要你有一定的编程基础知识了。
回复

使用道具 举报

发表于 2011-6-3 17:59:49 | 显示全部楼层
ABE结构,数据编辑器为我们提供了很好的思路不是么
未命名.jpg
回复

使用道具 举报

 楼主| 发表于 2011-6-3 18:43:52 | 显示全部楼层
谢谢大家的建议,尝试选用一个合适的方法实现目前正在做的地图。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-24 22:05 , Processed in 0.057299 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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