返回型函数 (TeaScript)
此页面主要介绍返回型函数的使用。
如需要查看“自定义函数”,请前往:函数(语法)。
如需要查看“函数”相关的知识,请返回:函数。
返回型函数,是指该函数内部执行完程序之后,会返回当前函数产生的最后的值。
call Example("Hello World")
script Example(a as string)
call ShowMSG(strparam(a))
end script
dim a as string = Example("Hello World")
script Example(a as string, return string)
if strparam(a) = "Hello World"
return "Hello, too."
Else
return "What?"
end if
end script
call showmsg(a)
在上述两个实例中,第一个是纯过程函数,不带任何返回值,第二个是内部定义返回return的值的函数。
内置函数
在 TeaScript 定义好的函数中,像是ItrCreate,ItrNext,NCreate,RGBA等内建的函数都可被变量赋值,返回不同的数值,例如NCreate返回创建npc(NCreate(...))的.permid,RGBA返回一个16位有符号整数型数值。
数学表达式
该条目在此页面也有部分讲述,下面都是基于游戏内的数值。
因为 TeaScript 系统十分的魔幻,可能在变量里和脚本内定义的数值会有精度上的区别,比如给变量直接赋值pi,会变成 3.14159274101257,给变量直接赋值e,会变成 2.71828174591064;但是直接使用call ShowMsg(pi)和call ShowMsg(e),会分别输出 3.1415926535898 和 2.718281828459。
| 常量名 | 描述 | 数值(取自游戏内的值,倾斜为给用户变量赋值) |
|---|---|---|
| Pi | 圆周率的值 | 3.1415926535898
3.14159274101257 |
| e | 自然对数底数的值 | 2.718281828459
2.71828174591064 |
| Rnd | 随机数的值,取值为0~1。
随机值种子随时间的变化而变化。 |
0 ~ 1
取小数位15位。 |
abs
返回绝对值。
dim a as double = abs(-5)
'输出:
'a = 5
exp
返回常数e的乘方。
dim a as double = exp(1)
dim b as double = exp(5)
' 输出:
' a = 2.71828174591064
' b = 148.413159102577
log
返回以e为底的该数的对数。
dim a as double = log(10)
dim b as double = log(e)
' 输出:
' a = 2.30258512496948
' b = 1
sgn
数学中的符号函数,如果参数值为正数,返回1;参数值为0,返回0;参数值为负数,返回-1。
dim a as double = sgn(6)
dim b as double = sgn(0)
dim c as double = sgn(-9)
' 输出:
' a = 1
' b = 0
' c = -1
int
返回这个数向下取整后的数。
dim a as double = int(4.6)
dim b as double = int(-4.6)
dim c as double = int(4.4)
dim d as double = int(-4.1)
' 输出:
' a = 4
' b = -5
' c = 4
' d = -5
fix
返回这个数的整数部分。该函数会将后面的小数部分忽略掉。
dim a as double = fix(4.6)
dim b as double = fix(-4.6)
dim c as double = fix(4.4)
dim d as double = fix(-4.4)
' 输出:
' a = 4
' b = -4
' c = 4
' d = -4
sqr
返回这个数的开平方数。
dim a as double = sqr(2)
dim b as double = sqr(144)
' 输出:
' a = 1.41421353816986
' b = 12
注:因为 TeaScript 不支持复数(sqr(-1) = ±i)概念,因此尝试执行sqr(-1)会导致游戏程序卡死!
sin
返回正弦值。
dim a as double = sin(pi)
' 输出:
' a = -6.98296672221876E-15
cos
返回余弦值。
dim a as double = cos(pi)
' 输出:
' a = -1
tan
返回正切值。
dim a as double = tan(pi/4)
' 输出:
' a = 1.00000004371139
atn
返回反正切值。
dim a as double = atn(1)
' 输出:
' a = 0.785398185253143
注:三角相关函数全部使用弧度制。
round
round(x, y)
返回该数字x四舍五入后的特定小数位y的值。
dim a as double = round(20.486222,2)
' 输出:
' a = 20.49
反正切2函数
GetAngle
getangle(x, y)
返回三角形之间形成的角度(从0到1)。类似于atan2[1]函数。
' 这里假定用户创建了一个 array 数组 "GAValue",并定义了下标数。
array(GAValue(1)) = getangle(0,0)
array(GAValue(2)) = getangle(1,0)
array(GAValue(3)) = getangle(1,1)
array(GAValue(4)) = getangle(0,1)
array(GAValue(5)) = getangle(-1,0)
array(GAValue(6)) = getangle(-1,-1)
array(GAValue(7)) = getangle(0,-1)
' 输出:
' GAValue = [-1, 0, 0.125, 0.25, 0.5, 0.625, 0.75]
颜色值
RGBA
rgba(r, g, b, a)
用于表达颜色的整数值,这个函数返回的必定是一个有符号的整数型[2]的值,计算公式为:r * 65536 + g * 256 + b * + a * 16777216。
因此,如果颜色的int值为-1,那此物体将会完全不透明。
例子如下。
dim a as integer = rgba(255,255,255,255)
dim b as integer = rgba(255,0,0,0)
dim c as integer = rgba(0,255,0,255)
' 输出
' a = -1(完全不透明)
' b = 16777680(红色的最大值,但是完全透明)
' c = -16711936(只渲染蓝色)
npc(a).forecolor = rgba(255,255,255,255)
' 输出
' NPC a 的前景色完全渲染。
需要注意的是,某些对象里面的 .forecolor_x 是有符号字节型,如果对该值赋值为大于128的话,那么程序会立马将该值减去256,直到-1(.forecolor_a = 255等价于.forecolor_a = -1)。
字符处理
Len
len(text)
返回字符串长度。 如果参数为一段数值,也可以作为字符串。
dim a as double = len("Hello SMBX World!")
dim b as double = len(1234567890)
' 输出:
' a = 17
' b = 10
Left
left(text, len)
返回从左边裁切的字符串。
该函数会从text的第0个下标位置不断向右选择裁切位置len,然后返回该值。
dim a as string = "Hello SMBX World!"
dim b as string = left(a, 10)
' 输出:
' b = "Hello SMBX"
Right
right(text, len)
返回从右边裁切的字符串。
函数组成与text类似,不同的是裁剪从末尾开始。
dim a as string = "Hello SMBX World!"
dim b as string = right(a, 10)
' 输出:
' b = "MBX World!"
Mid
mid(text, start, len)
返回一段文本从start裁剪字符数len的一段字符串。
文本裁剪将从给定点下标位置start开始,裁剪长度为len。
dim a as string = "Hello SMBX World!"
dim b as string = mid(a, 3, 9)
' 输出:
' b = "llo SMBX "
Asc
asc(char)
返回字符的 ASCII 值。
dim a as integer = asc(E)
' 输出:
' a = 50
所有 ASCII 字符对应的数值可以访问下文。
Chr
chr(code)
返回这个数值所对应的 ASCII 字符,范围为 0~127,大于这个范围会强制输出“?”。
dim a as string = chr(68)
' 输出:
' a = "D"
Ascw
ascw(char)
返回字符的 Unicode 值。
dim a as long = ascw("你")
dim b as long = ascw("好")
' 输出:
' a = 20320
' b = 22909
Unicode 值对应字符请前往搜索引擎,或使用转换工具查找。
这里列举几个:
https://symbl.cc/cn/unicode-table/
https://www.jyshare.com/front-end/3602/
Chrw
chrw(code)
返回这个数值所对应的 Unicode 字符,范围为 0~65535。
dim a as string = chrw(163)
dim b as string = chrw(1044)
' 输出:
' a = "£"
' b = "Д"
数值为整数型,如果网站提供的是16进制的数(例如3FAE),请使用计算器转换成10进制再填上去。
Cstr
cstr(number)
返回这个数字的字符串形式,且参数number只能为数字。
dim a as string = cstr(10125)
' 输出:
' a = "10125"
Cdbl
cdbl(text)
返回这个字符串的数字形式。
dim a as double = cdbl("10125")
' 输出:
' a = 10125
当然,返回值对应的变量如果是字符串类型,该函数也照样奏效。
注:该函数会将参数text从做到右解析,如果末尾或中间出现了其他非阿拉伯数字,或是出现了第二个小数点等情况,则后面全部裁切忽略;如果开头为非阿拉伯数字,则这个返回值会变成0并结束。处理上述情况后,将这个返回值转换成双精度浮点数。
call showmsg(cdbl("123.456.7|89"))
call showmsg(cdbl("123a456be789"))
call showmsg(cdbl("a123456789"))
' 输出:
' 123.456
' 123
' 0
UCase
ucase(text)
将字符串当中的所有小写字母转换成大写字母。
dim a as string = uCase("Hello SMBX!")
' 输出:
' a = "HELLO SMBX!"
LCase
lcase(text)
将字符串当中的所有大写字母转换成小写字母。
dim a as string = lCase("Hello SMBX!")
' 输出:
' a = "hello smbx!"
Instr
instr(start, text, search)
该函数会从字符位置start开始查找子字符串search在源字符串text中的位置。
dim a as double = instr(1,"Hello SMBX, SMBX is FUN!","SMBX")
dim b as double = instr(9,"Hello SMBX, SMBX is FUN!","SMBX")
' 输出:
' a = 7
' b = 12
格式
Format
Format(FCC, Value)
将对应的值输出为特定格式的值。
FCC 可以使用的格式代码如下:
- %d - 整数格式(等价于
fix(a)) - %nz - 该数定义为n位字符串,从末尾开始到n位,如果前方位为空位,则补充0。
- %.nf - 浮点数格式(等价于
fix(a),小数后保留n位,如果末尾后一小数位大于等于5,则前一位+1。) - %h - 16进制格式
其他格式代码由于限制可能无法使用或不起作用。
dim a as string = format("%8z",508)
dim b as string = format("%d",52.33)
dim c as string = format("%3.2f",5.259)
dim d as string = format("%h",33102)
' 输出:
' a = "00000508"
' b = "52"
' c = "5.26"
' d = "814E"
数组
ubound
ubound(array)
返回数组的长度。
call redim(0, arrayTest, 10)
dim a as double = ubound(arrayTest)
' 输出:
' a = 10
技术性
ScriptID
返回脚本的ID值。[需要验证 1]
val(a) = scriptid(name)
不可用
Replace
replace(text, find, replacewith, start, count, compare)
此功能原意是返回一个字符串,其中源字符串的某些部分被新部分替换。你可以在源字符串中定义要搜索的部分,以及替换的最大次数;此函数在新版本不可用。
| 参数名 | 介绍 |
|---|---|
text
|
源字符串内容。 |
find
|
需要搜索并替换的源字符串中的部分。 |
replacewith
|
要替换的新的字符串的部分。 |
start
|
搜索的开始点。 |
count
|
替换次数,设为-1则无限制。 |
compare
|
可以是0或1,设置0为区分大小写。 |
尽管不可用,但你仍可以尝试自己定义这个函数。
引用
Super Mario Bros. X Scripting Help 文档及功能猎手版。
https://wohlsoft.ru/pgewiki/TeaScript_Syntax
- ↑ 此脚本需进一步验证。
| 请注意,这里以下所有的条目均以 SMBX 1.4.5 Patch 31.1 为基底。 | |
|---|---|
| 基础 | 语法 | 函数 | 回调型函数 |
| 组件 | BGP (大背景) | 背景物件 | 位图 | 方块 | 角色 | 特效 | 流体 | 计时器 | NPC | 文本 | 传送点 | 系统变量 |
| 技术性 | 额外值 | BSet 函数 | Playnote 函数 | 特殊图层 | 未知函数 | 自动运行事件 | 编辑器函数 |