加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于《魔兽争霸III》的游戏脚本语言JASS

(2007-06-18 17:56:00)
标签:

杂谈

    其实JASS是我最熟悉的程序语言,而C语言以及汇编我曾经仅仅只是浅浅的学过,由于当时的条件,还没办法对C和汇编进行实际应用,因此对于JASS语言的好坏优缺我也无法给予评断,说到编程,实际上我只是个门外汉,但这样一个门外汉至少写了上十万行的JASS脚本。

    JASS语言的书写格式貌似十分常规,而且简单易懂,在某些方面似乎有点象LUA,实际上我也说不清楚,先看看这个简单的JASS函数结构吧:

  • function helloworld takes nothing returns nothing
        call DisplayTextToForce(GetPlayersAll(),"Hello world!")
    endfunction

    这个函数如果在游戏中执行后,就会在屏幕上显示“Hello world!”。在上面语句中的function后面紧跟着是函数名,即helloworld(如果你想调用一个函数必须使用call指令来调用),takes后面紧跟着的是函数的参数,nothing则为无参数,returns就不多解释了吧,当然是返回值。

    单独的一个函数在游戏中是无法被使用的,在魔兽争霸3的游戏世界里有一种触发机制,这种触发机制才能触发某一个函数的运行,如果你想让helloworld 这个函数能够真正在游戏中被使用,光写出该函数还没什么用,接下来你要做的是,你得申明一个触发器(Trigger),并使这个触发器能够被游戏触发,同时调用helloworld这个函数:

  • 步骤1:打开魔兽争霸3目录下的World Editor.exe,启动魔兽地图编辑器。如果你无法启动,可能是因为没安装免CD补丁,上google或baidu吧,这个是做任何事情的基础的基础。
  • 步骤2:启动后,你会在编辑器的上端看见一排选项,这时按下快解键Alt+M,你会发现出现了一个下拉框,然后选择触发编辑器。PS:这个东东非常强大哦,其实是BLZ的懒虫策划们设计的一个GUI脚本编辑器-.-。
  • 选择新建->触发器。当创建好触发器后,你会发现触发器有三个要素,一个是事件(Event),一个是条件(Condition),以及执行(Action)的动作,恩恩,似乎简单易懂,呵呵。
  • 选择触发器函数框,然后新建一个事件。事件所指的是该触发器的触发点,即为什么而触发。当你在触发事件的选择下拉框里查看时,你会发现触发事件真的是多种多样呢!但是现在如果你想让你的hello world用JASS呈现出来,先别忙着研究这个,因为我建议你选择[游戏逝去时间]这个作为触发的事件,并在时间中设置为10秒。
  • OK,你如果想用触发编辑器完成你的helloworld计划是十分简单的,但如果想用JASS完成这个计划,那么请你选择触发编辑器->编辑->转换为自定义文本。
  • 这个时候你会看见原先的触发器GUI的界面完全成了文本格式的,并且里面多了两个函数。
  • 不出问题的话,你将看见的是:
  • function Trig____________________001_Actions takes nothing returns nothing
    endfunction

    //===========================================================================
    function InitTrig____________________001 takes nothing returns nothing
        set gg_trg____________________001 = CreateTrigger(  )
        call TriggerRegisterTimerEventSingle( gg_trg____________________001, 10.00 )
        call TriggerAddAction( gg_trg____________________001, function Trig____________________001_Actions )
    endfunction

  • 将你之前的函数helloworld复制到这里,即最后成了:

  • function helloworld takes nothing returns nothing
        call DisplayTextToForce(GetPlayersAll(),"Hello world!")
    endfunction
    function Trig____________________001_Actions takes nothing returns nothing
    endfunction
    //===========================================================================
    function InitTrig____________________001 takes nothing returns nothing
        set gg_trg____________________001 = CreateTrigger(  )
        call TriggerRegisterTimerEventSingle( gg_trg____________________001, 10.00 )
        call TriggerAddAction( gg_trg____________________001, function Trig____________________001_Actions )
    endfunction

  • 在函数Trig____________________001_Actions里增加指令:call helloworld()

  • 保存地图,并选择地图编辑器->文件->测试地图。

  • 哈哈,当进入游戏过了大概10秒左右后,你看见了你的计划 :)

    相信完成这套简单的操作后,你对魔兽3的触发机智也有了一定的了解,并开始思考这个GUI脚本编辑器的奥妙了吧,实际上稍加研究,你就会发现,其实这个编辑器的结构并不难理解。

    另外,值得注意的是,这种游戏触发机制并不仅仅只是在魔兽争霸3中应用,基本上大部分的游戏都是这样,因为这种模式是现实世界的写照(面向对象),就象你要吃饭一样,触发事件是你饿了,触发条件则是饭做好了,动作则是你开始拿筷子,下个动作就是张开嘴巴,最后动作是饭进入你的口中……呵呵,即简单又有趣,这就是游戏设计的一部分 :) 当然了,实际上的应用要比这个例子复杂许多。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有