找回密码
 点一下
查看: 2209|回复: 14

低频Mousemove事件使用办法.txt(终于解决了~)

[复制链接]
发表于 2011-5-16 11:35:04 | 显示全部楼层 |阅读模式
前面说过“鼠标移动”事件触发频率太高,现在找到了一个低频使用这个事件的方法,代码如下
//globle
point gv_p;
trigger gv_cursormoveTrigger;

//Action
bool Cursormove_Func (bool testConds, bool runActions)
{
    // Actions
    if (!runActions)
    {
        return true;
    }
    TriggerEnable(TriggerGetCurrent(), false);
    gv_p = Point(EventMouseMovedPosXWorld(), EventMouseMovedPosYWorld());
    //显示坐标
    UIDisplayMessage(PlayerGroupAll(), c_messageAreaSubtitle, (FixedToText(PointGetX(gv_p), c_fixedPrecisionAny) + (StringExternal(",") + FixedToText(PointGetY(gv_p), c_fixedPrecisionAny))));
    //-------------
    return true;
}

//function
void gf_Setcursorpoint () {
    if ((gv_cursormoveTrigger != null))
    {
        TriggerDestroy(gv_cursormoveTrigger);
    }
    gv_cursormoveTrigger = TriggerCreate("Cursormove_Func");
    TriggerAddEventMouseMoved(gv_cursormoveTrigger, c_playerAny);
}

然后在任意一个周期性事件触发里调用这个Setcursorpoint () ,
比如在一个0.125秒的周期事件触发里调用Setcursorpoint () ,效果是每0.125秒响应一次鼠标移动事件,并获取当前鼠标坐标点赋值给gv_p,想添加其他动作的话可以写在“//显示坐标”下面,这里添加了一个显示当前鼠标的世界坐标的动作。

PS:galaxy和C几乎一样,写起来太顺手了~~要是支持指针就更好了
发表于 2011-5-16 12:41:51 | 显示全部楼层
额,还是周期性的遏制这个触发,楼主不需要摧毁这个触发啊,只需要暂时关闭就可以了。
回复

使用道具 举报

 楼主| 发表于 2011-5-16 13:21:40 | 显示全部楼层
嗯,这里是不需要,在12人图里话,就需要了。
回复

使用道具 举报

发表于 2011-5-16 14:15:44 | 显示全部楼层
为什么呢?删掉和关闭掉是同样效果哦。
回复

使用道具 举报

发表于 2011-5-16 18:00:05 | 显示全部楼层
频繁创建和销毁触发器只有平白增加运算而已。直接禁用启用就好多了。

而且这段明显是从GUI转来的。

完全没体现出脚本的优势。
回复

使用道具 举报

 楼主| 发表于 2011-5-16 18:19:58 | 显示全部楼层

回 4楼(麦德三世) 的帖子

不知道的函数只能靠转哎,自己用起来暂时没问题就好啦
回复

使用道具 举报

 楼主| 发表于 2011-5-16 18:27:13 | 显示全部楼层
引用第3楼frozenleave于2011-05-16 14:15发表的  :
为什么呢?删掉和关闭掉是同样效果哦。
关闭也会删掉触发?不占用内存?
回复

使用道具 举报

发表于 2011-5-16 18:34:32 | 显示全部楼层
你这删的毫无意义。不断添加删除就结果而言与其说是节省内存,不如说是浪费了更多内存。

而且毫无意义地增加运算量。
回复

使用道具 举报

发表于 2011-5-16 19:44:45 | 显示全部楼层
删了再创建是无意义呢,例如对话框,我试过创建了然后删了,然后再创建,再删,对话框的ID是还是会为已经删掉的对话框留一个id。如果创建1000次对话框,即使全部删除了,下一个创建的对话框id是1001,那么我想触发器也会类似吧,这么高频的创建和删除,或许触发器的id会爆表的。。。
回复

使用道具 举报

 楼主| 发表于 2011-5-16 22:38:00 | 显示全部楼层
原来删除很增加运算量~~这个算是个人从WE遗留下来的毛病吧。如果是这样的话,就直接给每个玩家创建一个触发然后开启关闭就好了,把简单的问题复杂化了……

PS:难怪触发里没有创建删除触发的动作
回复

使用道具 举报

发表于 2011-5-17 17:42:10 | 显示全部楼层
可以在触发事件以后直接关闭当前触发器,然后等待0.125秒,再重新打开。
回复

使用道具 举报

发表于 2011-5-17 17:59:09 | 显示全部楼层
脚本好难啊
回复

使用道具 举报

 楼主| 发表于 2011-5-17 20:57:30 | 显示全部楼层

回 10楼(麦德三世) 的帖子

嗯,我原来就是用的这个办法,但总感觉12个触发同时注册可能会影响效率,所以想找个其他的法子。
回复

使用道具 举报

发表于 2011-5-18 12:40:37 | 显示全部楼层
一个触发就可以的了啊?为什么要十二个?在触发里面判断触发玩家序号,根据序号做动作。。。
回复

使用道具 举报

发表于 2011-5-19 19:11:37 | 显示全部楼层
谢楼主
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 08:21 , Processed in 0.070197 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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