[触发编辑器]鼠标双击事件和双击判定函数

[SC2论坛] [已跟帖]2013-9-25 10:54:34 作者:断层 来源:本站原创

    首先我们新建一个函数:双击,因为是要这个函数做出判定鼠标某个键是否在某个时间段内被双击,那我们就需要设置参数、变量和返回值。

    参数用来设置需要判定的鼠标键:

    函数参数

    鼠标键=左<鼠标按钮>

    类型:预设

    预设:鼠标按钮

    默认值:左

    上面这个参数用来判定鼠标左键的动作,而且方面我们随时设置参数值来判定其他鼠标键。

 

    变量用来判断鼠标点击动作的时间间隔,而这个变量需要在两次点击之间互动,不能作为局部变量存在于这个函数内每次都被重新赋值,所以使用全局变量:

    全局变量

    间隔计时=(新建计时器)<计时器>

    类型:计时器

    初始值:新建计时器

 

    这个函数是用来判断鼠标键是否被双击的,所以函数返回类型为:

    函数返回类型

    返回类型:布尔

 

    开始这个函数的动作之前,我们先来确定这个函数要做什么:鼠标点击一次,返回假,鼠标快速点击两次,返回真,因为双击会有个时间间隔,如果超出这个时限即使再次点击,也返回假。在明确了这些问题之后,继续来写函数。

    函数动作

    综合:If Then Else

    If:(点击的鼠标按钮)==鼠标键

    比较

    值1:点击的鼠标按钮

    运算符:==

    值2:鼠标键

    这里我们要获取鼠标点击事件中被点击的鼠标按钮,这个函数”点击的鼠标按钮“来达成,它返回被点击的鼠标按钮。用于响应一个“鼠标被点击”的事件。值2就是我们设置的参数”鼠标键“了,用来指定我们需要判定的鼠标键,它的初始值为:左,所以这个条件判定即是:点鼠标左键为真,否则为假。

 

    Then

    综合:If Then Else

    If:(间隔计时的剩余时间)>0.0

    比较

    值1:计时器剩余时间

    计时器:间隔计时

    运算符:>

    值2:0.0

    这个条件判断全局变量间隔计时是否已经走完,前面我们说了,如果超过时间间隔即使再次点击,也会返回假,这个条件判断即是:间隔计时内则为真,否则为假。第一次运行到这里,间隔计时并没有启动过,所以第一次鼠标点击的判定一定为假,不是双击。我们会在(间隔计时的剩余时间)>0.0 条件为假的时候(Else里) 启动计时器,而在这个条件为真时返回真。

    Then

    综合-返回真

 

    这样我们还没有开启间隔计时。上面说过,鼠标点击事件第一次(间隔计时的剩余时间)>0.0 条件判断一定为假,因为没有启动,所以我们在(间隔计时的剩余时间)>0.0 条件为假时启动计时器-间隔计时,我们设置计时器时间0.3秒,这样即是鼠标双击在0.3秒内完成,(间隔计时的剩余时间)>0.0 条件才会为真。而我们希望这个双击函数本身也能设置这个间隔时长,那就需要另一个参数了。

    函数参数

    双击间隔=0.3<实数>

    类型:实数

    默认值:0.3

 

    现在继续写(间隔计时的剩余时间)>0.0 判断为假Else里的动作。

    Else

    计时器-启动间隔计时,它是一个一次性的计时器,并且会在现实时间双击间隔秒内结束。

    返回假

 

    到此处,只剩第一个条件(点击的鼠标按钮)==鼠标键 为假时的动作了,既然点击的鼠标键并不是我们希望监测的,那很简单,返回假就是了。

    Else

    返回假

    现在要做一个触发器,利用这个函数来做鼠标双击事件判断,新建一个触发器:鼠标双击。

    事件:

    UI-玩家 任意玩家将任意鼠标按钮朝下点击。

    动作:

    综合:If Then Else

    If(双击鼠标(左)键,时间间隔(0.3)秒)==真

    Then

    调试-将”双击!“作为使用类型01的调试输出来显示,并执行在游戏窗口中将其显示

    Else

    上面这一大串主要是为了说明判断的依据和逻辑,俗话说授人以鱼不如授人以渔,虽然我本身是个编辑器菜鸟,绝大多数编辑器知识还都没做研究,但既然写教程,就要写清楚。不过说实话,写完之后一看,自己都觉得说不定还是不要写出来的好,本来一个很简单的东西,这么写未免也有点复杂了对吧。下面把这个函数的整体构造和鼠标双击触发器放出来方便查看。


看大图

函数:双击


看大图

触发器:鼠标双击


看大图

文件夹

    当然上面的函数还是存在问题的,就是没考虑这个鼠标被点击动作是由哪个玩家发出的,也就是说假如玩家1点了鼠标,玩家2在间隔时间内点了第二次,这个鼠标双击事件中的双击函数判定还是会为真。这样就不科学了。

    那就再加工一下,我们给双击函数加一个参数"玩家=任意玩家<整数>",用来判定玩家。然后把全局变量“间隔计时”设置成值为15的数组。这样就可以判断16个玩家了。然后在双击函数里所有的“间隔计时”索引里调用这个参数。然后条件(间隔计时[玩家]的剩余时间)>0.0和计时器-启动间隔计时[玩家]就可以对应每个玩家了。

    最后鼠标双击触发也要改一下,把双击函数的玩家参数设置成“进行触发的玩家”。整个函数和触发如下图:


看大图


看大图

 


292
星际前锋

 5V5的团队星际热血足球比赛,只要你可以赢得比赛,你甚至可以使...

斗战英雄 - dota

 斗战英雄是一张英雄三路乱斗地图,也就是大家熟知的dota模式游戏...

不死突袭3 Undead Ass

 玩家所在的美军陆战队小队被空投到萨利姆镇,调查当地发现的小规...

异虫入侵地球-感染危

 女王大人准备入侵地球了!但地球联合理事会的部队非常强大,正面...

友情专区: DNF | 暗黑破坏神3 | 英雄联盟 | 艾尔之光 | 魔域 | cf | QQ飞车 | QQ炫舞 | nba2k | 星际争霸2 | CSGO |