为了账号安全,请及时绑定邮箱和手机立即绑定

War3 We的Jass函数编写?

/ 猿问

War3 We的Jass函数编写?

Yii
富国沪深 2019-02-05 10:06:11

War3 We的Jass函数编写


查看完整描述

2 回答

?
慕斯王

 1)函数定义要素
  语法格式
  function 函数名 takes 参数表 returns 返回类型
  局部变量声明
  局部变量声明
  ...
  表达式
  表达式
  表达式
  ...
  return 返回表达式
  endfunction
  其中:
  a) 定义函数的关键字有: function ... endfunction, takes, returns
  b) 函数名的首个字母不能是数字, 函数名中不能有第2章中所说的操作符, 特殊字符和多数非字母符号(如: 空格~`!@#$%^&*()-+=|\{}[];:'"<>?,./), 也不能使用中文. 函数命名要尽量简明易懂, 突出函数功能.
  c) 参数表是规定传递入函数的数据类型和参数数量, 作用是函数间的数据交换(输入), 参数之间用逗号( , )分开. 不能定义数组作为参数, 这点在的第一章已经做了说明.
  参数必须规定数据类型或者是无参数, 如
  function myfunction1 takes nothing returns nothing
  endfunction
  function myfunction2 takes integer creatnum, unit myunit returns boolean
  call CreateNUnitsAtLoc(creatnum, GetUnitTypeId(myunit), Player(1),
  GetUnitLoc(GetTriggeringUnit()), bj_UNIT_FACING )
  return true
  endfunction
  myfunction1为无参数的函数, 调用时不需要传递参数, 即是用 call myfunction1()
  myfunction1为2参数函数, 参数类型规定为 integer 和 unit. 调用myfunction2时必须同时传递数据类型分别integer和unit的参数, 或者传递入空值(参看第二章的举例).
  注意: 数字的空值为 0, handle(句柄)类型及其子类别的空值为 null. 关于handle类型请参看第一章. 我在本章背后会列出各数据类型所对应的空值.
  d) 返回类型是规定函数返回的数据类型, 作用同样是函数间的数据交换(输出), 可以用returns nothing 说明没有返回参数
  e) 局部变量声明必须写在函数开始部分. Jass总是先声明, 再使用. 如:
  function myfunction3 takes nothing returns nothing
  local integer i = 5
  local integer j = 10
  call myfunction2(i,美女 )
  sleep(360)
  call myfunction2(j,美女 )
  endfunction
  下面的函数是错误的:
  function myfunction3 takes nothing returns nothing
  local integer i = 5
  call myfunction2(i,美女 )
  local integer j = 10
  sleep(360)
  call myfunction2(j,美女 )
  endfunction
  f) 表达式是函数的骨干, 是逻辑的实现部分. 写好这部分, 需要对common.j, blizzar.j,commond.ai有一定的了解.
  g) 返回表达式的值必须和该函数声明时的返回类型一致, 不要声明返回为恐龙类型, 却偷梁换柱返回个美女. 返回值不能是数组.

  2) 程序执行入口函数
  每个Jass脚本文件都需要定义执行程序的入口函数
  在触发器脚本文件war3map.j中, config()和main()是入口函数.
  config()函数作用是在开始游戏之前初始化地图, 如按设计时指定点放置单位/可破坏物,初始化单位状态等.
  main()函数在游戏开始才执行.
  在AI脚本文件中, 用户需自定义main()函数作为该脚本文件的程序入口.
  脚本文件执行入口函数的固定格式:
  function main takes nothing returns nothing //触发器和AI脚本均使用
  function config takes nothing returns nothing //触发器脚本使用
  注意: 一张地图中只能有1个触发器脚本文件war3map.j, 此文件包含在w3m或w3x中
  一张地图中可以包含多个AI脚本文件, 输入AI脚本文件的目录为: \scripts\



查看完整回答
反对 回复 2019-03-20
?
繁花不似锦

JASS(正确地说是JASS 2)是魔兽3的程序语言,用于控制游戏和地图的进行,也是魔兽游戏和地图的基础。 地图编辑器中摆放的单位(Unit),区域(Region) ,触发(Trigger)……等,最终都会被翻译成JASS语言存在地图文件里,在游戏时被使用。JASS在语法结构上比较接近Basic,同时也引用了许多C的东西。如果读者有接触过这二种编程语言,相信一定能很快上手!如何使用JASS?  触发编辑器中的 Edit =>Convert To Custom Text 将触发转成文字型态。  在触发编辑器下面选 Actions => Custom Script 可以插入单行JASS叙述。  此外,如果要定义所有触发都能调用的函数  JASS语言的基本函数和常量都是直接调用游戏的函数,他们被存放在war3patch.mpq内的Scripts\common.j中,另外还有一些扩充函数放在war3patch.mpq内的Scripts\blizzard.j中。war3patch.mpq内的Scripts\common.ai则包含了用于设计AI的 内部函数和扩展函数,虽然AI也是用JASS码编成,但本文不探讨关于AI的设计,有兴趣者请自行研究。  地图中的触发以及物件的摆设情形等,都会被编译成JASS并储存在war3map.j文件中。读者可以到WE中的 File => Export Script 将它导出。  JASS语言以列为基本单位。每一行的代码必须有完整的意义,不能把一行的代码分两行写;也不可把两行的代码写在同一行。  JASS语言是区分大小写的,该大写就要大写;该小写就要小写。  写在//后面,直到该行结束的文字都是注解内容,这也是JASS唯一的注释语法。後面的例子会多处用到这个注释符号,这个符号和后面的注释只是用于解释代码的功能,并不会被执行到 。  在JASS中,空格的使用限制很宽松,除了某些必要的地方一定要有至少一个的空格以外,其它的地方都是可空可不空。此外,要空几格都无所谓,电脑不会因为你空了很多格就说有错。因此,使用者应多多利用空格作缩进,以使代码更易读。  和数学一样,()内的代码优先被执行。不过请注意,JASS中只有小括号()有用,中括号[]和大括号{}不可作为改变执行顺序之用。JASS错误处理  语法错误:少写一个字母,少空空格,或者把大写写成小写等,都是写JASS常犯的错误。一般来说,如果语法有问题,在存档时电脑会显示编译错误的信息,并指出是哪一行有问题,依它的指示修正即可。不过当电脑指出某行有误时,也可能是前面的几行出了问题(范围大概约1~5行),所以如果你怎么检查都看不出某行到底错在哪里的时候,检查前面的代码。此外,某些错误会导致存档时WE当掉,导致先前的辛苦付诸流水,所以请随时存档并尽量小心。  执行错误:一般会发生这种问题是指定的变量没有赋值,当电脑找不到变量的值时,由于无法继续执行,因此会无条件跳出目前的函数,如果该函数是要传回值的函数,它将不会传回值(也是无任何返回),因而可能导致调用它的函数也跳出。此外如除数为0也会造成类似的结果。  无限循环:一般这种事都是人为疏忽(忘了写exitwhen,或是触发的动作引发同一个触发,而造成无限循环等),发生机会不大。不过一旦发生可是会让War3当掉的喔。一定要学JASS吗?  当然不一定。即使是官方的战役,其程序员也只使用了GUI来完成制作。一般来说,单纯使用GUI Trigger,就可以达到大多数的功能。但是笔者还是建议对Trigger有相当了解的人学些基本的JASS写法,可以省下不少力气,且能让你的地图更不lag!!



查看完整回答
反对 回复 2019-03-20
  • 2 回答
  • 0 关注
  • 261 浏览
我要回答

相关问题推荐

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信