找回密码
 点一下
查看: 4133|回复: 20

<AI>Timer做的大钟锈掉了啊- -

[复制链接]
发表于 2009-11-13 23:07:53 | 显示全部楼层 |阅读模式
哦……其实偶在说这个AI脚本中用来记录时间的变量一直不增加- -bbb
脚本本身貌似没有语法错误呢,为什么会这样呢?【呆呆】
Help~~~~

[codes=jass]
globals              //声明全局变量
integer udg_Time2 = 0
endglobals
                                                 //时间处理
function wtime takes nothing returns nothing  
   set udg_Time2 = udg_Time2 + 1
endfunction
                                                 //计时开始
function timing takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t,1,true,function wtime)
endfunction
//=======================================================================================
//主要部分
//=======================================================================================
function main takes nothing returns nothing
  call Sleep( 5.0 )
  call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1,"Hallo World")
  
  call timing()
        loop
         if udg_Time2 > 20 then
          call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1,"Hallo World")
           call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,1,"Over")
          endif
       call Sleep( 1.0 )
      endloop  
         
endfunction

[/codes]
发表于 2009-11-14 11:07:14 | 显示全部楼层
先问一下:loop是不是一定要写exitwhen?
如果语法没错误,貌似也要等20秒才能看到效果
回复

使用道具 举报

发表于 2009-11-14 11:14:58 | 显示全部楼层
LS错。
游戏开始5s后,发布第一条信息。
开启Timer。
进入循环。
等待20s之后,开始每秒发布信息。

也就是说,在第20s没有任何现象发生。
回复

使用道具 举报

 楼主| 发表于 2009-11-14 11:33:31 | 显示全部楼层
是的,偶的判定就是5 + 20秒后生效呢,可是时间已经过去了却没有反应- -
而且用这个变量控制的所有功能都无效的
回复

使用道具 举报

发表于 2009-11-14 11:45:17 | 显示全部楼层
你的main函数是注册了一个游戏初始化事件么
回复

使用道具 举报

发表于 2009-11-14 11:48:33 | 显示全部楼层
main函数的执行机制啊……
回复

使用道具 举报

发表于 2009-11-14 11:52:11 | 显示全部楼层
还是hallo world呢。。
回复

使用道具 举报

发表于 2009-11-14 12:21:21 | 显示全部楼层
这个用局部变量是不是好点?
回复

使用道具 举报

发表于 2009-11-14 12:33:22 | 显示全部楼层
引用第2楼血戮魔动冰于2009-11-14 11:14发表的  :
LS错。
游戏开始5s后,发布第一条信息。
开启Timer。
进入循环。
等待20s之后,开始每秒发布信息。
.......
额,我只是说的简单了点,我也知道前面还有5秒
回复

使用道具 举报

 楼主| 发表于 2009-11-14 12:39:46 | 显示全部楼层
这段脚本偶当做ai使用了呢,Main函数自动执行有的- -
但是时间变量不行
回复

使用道具 举报

发表于 2009-11-14 12:42:00 | 显示全部楼层
wait的东西只能在触发里面使用,其他情况后面的代码自动被无视掉
回复

使用道具 举报

 楼主| 发表于 2009-11-14 12:47:43 | 显示全部楼层
LS指的是哪部分呢?!听不懂……
回复

使用道具 举报

发表于 2009-11-14 12:49:32 | 显示全部楼层
你可以把main换个名字,然后注册到一个游戏开始后0秒的触发里面就正常了
回复

使用道具 举报

发表于 2009-11-14 12:55:03 | 显示全部楼层
你们对AI脚本完全没有了解么?

这个是AI不是war3map.j,跟地图初始化毫无关系。和main函数的特性也没关系。

这个脚本的问题只有一个——你使用了timer。

而AI里是不能用timer的。甚至,作为编程习惯来说,不建议在AI中创建任何实体对象。

用sleep来计算时间,或者干脆用jass和ai通讯的方式,由jass来进行报时。
回复

使用道具 举报

发表于 2009-11-14 12:58:38 | 显示全部楼层
咦?这个是以AI方式运行的么?

确实AI是不可以创造handle的
回复

使用道具 举报

 楼主| 发表于 2009-11-14 13:05:09 | 显示全部楼层
那啥 “注册执行”指的是什么- -
main里面的loop部分可以正常执行的 只是timer停住了
回复

使用道具 举报

 楼主| 发表于 2009-11-14 13:08:49 | 显示全部楼层
啊啊,原来是这样……
OMGD
回复

使用道具 举报

发表于 2009-11-14 13:09:30 | 显示全部楼层
跟你说了,不要用timer,因为ai里本来就用不了timer

注册执行那句不要管它,因为eff以为你这个是普通jass了。
回复

使用道具 举报

发表于 2009-11-14 13:13:34 | 显示全部楼层
引用第14楼eff于2009-11-14 12:58发表的  :
咦?这个是以AI方式运行的么?

确实AI是不可以创造handle的


创造还是可以创造的,但是会导致各种混乱。原则上不建议在AI里创造任何实体对象。

而且AI里的I2S作用方式和jass中完全不同。因此也无法写屏幕输出handle
回复

使用道具 举报

发表于 2009-11-14 13:25:17 | 显示全部楼层
还有据本人测试preloader这个函数很神奇,他居然和war3map.j不共享同一片存储空间
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 16:12 , Processed in 0.034255 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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