HelpCenter:SMBX/Script/Basic/3

如果想阅览 SMBX 基础脚本教程的全部内容，请访问：SMBX 基础脚本合集

如果想阅览 SMBX 基础脚本的 TeaScript 简介的内容，请访问：SMBX 基础脚本 1 开始

如果想阅览 SMBX 基础脚本的 TeaScript 语句的用法，请访问：SMBX 基础脚本 2 语句

## 函数的概念

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、（OOP中）方法。

一个较大的程序一般应分为若干个程序块，每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念，用子程序实现模块的功能。在C语言中，子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数，其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。

在 TeaScript 里，有很多种函数，它们大多数使用来控制游戏的运行或控制变量，再或者创建物体等等操作。

无论是什么函数，前面必须要加上：call。但有一个例外：NCreate。

## 调用函数

### Sleep 暂停

Sleep 是用来暂停进行脚本的控制函数，格式如下：call sleep(framevalue)。

P.S:sleep 对于直接调用脚本的方法以及全局脚本是不管用的。必须由事件创建的触发脚本的方法才会生效，还有对于 do ... loop 的脚本不加的话会导致游戏的崩溃。

### Message 消息框

#### ShowMSG

消息框一般指的是游戏里对话框，这种对话框一般情况下用事件或NPC设上消息并赋予Friendly属性即可触发。

格式如下：

```
1	call showmsg(string)

```

##### 特殊格式

特殊格式是 1.4.5 里的用来加强消息框效果的特殊字符格式。

1.4.5可以直接使用。（具体使用方法请看SMBX 教程 编辑器 - 事件。）1.4.4未知。

已知以下格式：

* \c[color=rgb] 赋予文本字体颜色，例子：\cff0000I am Red!：I am Red!
* \alpha 赋予一个字符一个字符渐出效果
* \n 将当前段落换行
* \quake 赋予字符震动效果，适合用在震惊或情绪激动的对话中。

#### SysShowMSG

当然，5438A38A 内置了一个可以弹出 Windows 的消息框，也是未公开的功能。

格式如下：

```
1	call sysshowmsg(string,type,title)

```

其中，type是窗口的类型，具体数值请访问：SMBX 高级脚本 2 自定义关卡 - 自定义消息框。

#### SysShowInput

除了 Windows 消息框，还有 Visual Basic Script 里出现的文本框。唯一的区别是跟 Windows 消息框有区别，他是可以输入内容的。

格式如下：

```
1	call sysshowinput(string,title)

```

这种消息框还可以配合条件语句使用。例如：

```
1	dim input1 as string
2	input1 = sysshowinput(string,title)
3	if input = "Hello World!" then
4	  call showmsg("Hello World!")
5	end if

```

### Layer Controls 图层控制

#### LMove

LMove 是用来控制图层移动的函数。

格式如下：

```
1	call LMove(layername,sx,sy,mode)

```

其中，Layername 代表的是图层名，Mode 有2种模式。设置为0以给定速度移动层，设置为1以给定相对位移移动图层。

#### LSet

LSet 是用来控制图层的状态以及透明度。

格式如下：

```
1	call LSet(layername,type,value)

```

其中，type 代表的是模式，1 为显示，2 为隐藏，3 为切换显示&隐藏模式。value 代表是否显示烟雾特效，0 为显示，其他值为隐藏，全局脚本里会影响世界图层。

不过，type 还有另一种用法，将 type 设为 38，你就解锁了新的 LSet 用法！因为这个值代表图层的透明度，对应的 value 将是透明值，范围是 0~255.

*P.S：透明度不会影响到大地图中的图层。*

#### LSpin

LSpin 是用来控制图层的旋转。

格式如下：

```
1	call LSpin(layername,x,y,anglespeed)

```

其中，x，y 代表旋转中心的坐标，anglespeed 代表旋转的角速度，将此值设为 0 以重置旋转过程，全局脚本里会影响世界图层。

*P.S：旋转只会影响 NPC 和方块。*

### Level Control 关卡控制

此外，5438A38A 还内置了几个函数用来丰富关卡以及做到原版理论做不出来的样子，理论上只要这些函数用的精妙，可以做到美化关卡，制作自定义关卡功能。想了解自定义关卡的制作方法，请了解：SMBX 高级脚本 2

#### TCreate 创建调用事件

TCreate 是用来创建一个事件触发器。

格式如下：

```
1	call TCreate(evename,delay)

```

其中，evename 代表事件名称（可以包括带空格的事件，但还是建议使用一体化的事件名称。），delay 代表事件创建的延迟帧数。

#### TCreateEX 传递参数给脚本

TCreateEX 不同于 TCreate，他是一种在特定帧后执行本地/全局脚本并将参数传递给脚本的功能。

格式如下：

```
1	call TCreateEX(ScriptName,timer,par1,par2,par3)

```

其中，scriptname 是要执行的脚本，timer 是等待的帧数，par1，par2，par3 代表传递给不同的 Sysval(Param\*) 的值。

#### TClear 删除调用事件

TClear 是用来删除一个事件触发器。

格式如下：

```
1	call TClear(type,evename)

```

其中，type 代表清除类型，1 为清除所有激活的事件计时器。0 为仅清除给定事件的计时器。

#### EXEScript 执行脚本

EXEScript 是用来直接执行一个本地/全局脚本。

当它执行时，它会暂停主脚本的顺序执行，直到给 ExeScript 赋予的脚本程序执行完为止。

格式如下：

```
1	call EXEScript(scriptname)

```

#### AudioSet 音频脚本

AudioSet 是用来控制游戏内的音效/音乐并进行播放/停止播放的脚本。

他分为好多种。一种是音效里的，另一种是音乐里的。不过他们都公用以下格式：

```
1	call AudioSet(mode,soundid,par,filepath)

```

par 不使用的话设置为 0。

filepath 不使用的话设置为空字符串，用：""表示。

##### Sound 声音/音频

mode的值可以为：

* 1 初始化音效
* 2 播放音效
* 3 停止播放音效

###### 1 初始化音效

它的作用是将音效进行加载并且放在对应的ID内存。

格式如下：

```
1	call AudioSet(1,soundid,par,filepath)

```

soundid 代表音效的ID，目前程序提供了 1024 个音效可供创建者使用。

par 代表音效的副本是否可以同时播放。

filepath 代表音效的文件名，尽量在世界文件夹的根目录下，如果是在文件夹内，很可能导致后来加密打包地图后不起作用。

###### 2 播放音效

它的作用是将音效进行播放。

格式如下：

```
1	call AudioSet(2,soundid,0,"")

```

soundid 代表音效的ID。如果对应的 ID 在内存中不存在，将不会有任何效果。

###### 3 停止播放音效

它的作用是将音效进行停止播放。

格式如下：

```
1	call AudioSet(3,soundid,0,"")

```

##### Music & Stream 音乐/流

Music 适合时长比较长的音频流。不适合用在 sound 里。

mode的值可以为：

* 11 播放音乐/流
* 12 停止播放音乐/流

###### 11 播放音乐

它的作用是将音乐/流进行加载并播放。

格式如下：

```
1	call AudioSet(11,fadems,0,filepath)

```

与音效不同的是，par 没有任何实际作用，fadems 代表淡入的毫秒数，filepath 同音效。

###### 12 停止播放音乐

它的作用是将音乐/流进行加载并停止播放。

格式如下：

```
1	call AudioSet(12,fadems,0,"")

```

其中，fadems 代表淡出的毫秒数。

### Format Function 格式函数

#### Format Output 输出格式

C 语言里，我们想对一个变量输出数据时，一般需要用到“%d”,"%c"等等格式，他们代表输出符，用来输出什么类型的变量以及输出什么变量的数据。

一个例子：

```
1	#include <stdio.h>
2
3	int main() {
4	  int a = 25;
5	  printf("%d",a);
6	  return 0;
6	}

```

里面的"%d"代表的是以十进制的形式输出整数型变量，后面的a代表地址符，指以十进制的形式输出整数型变量为 a 的数据。

再比如：

```
1	#include <stdio.h>
2
3	int main() {
4	  double a = 6.00050;
5	  printf("%5.2lf",a);
6	  return 0;
6	}

```

里面的"%lf"代表的是以双精度浮点型输出，前面的"5.2"里面，5 代表不小于 5 格的显示宽度，2 代表保留 2 位小数。后面的a代表地址符，指以双精度浮点型，并以显示宽度不小于 5 格且保留 2 位小数的形式输出变量 a 的数据。

在 SMBX 里，它与 C 语言类似，但又不同。

格式如下：

```
1	Format(FCC,Value)

```

其中，FCC 全称 Format Control Chatacter，用来控制格式，格式控制符必须放在""内，Value 代表一个数。

一个例子：

```
1	dim a as integer = 5000
1	call showmsg(Format("%7z",a)
1	'Output "0005000"

```

#### Round 双精度四舍五入

Round 是一种数学函数类型，用来返回一个双精度类型值。此函数将对输入的值进行四舍五入。您可以指定保留小数点后的位数。

格式如下：

```
1	Round(Exp,Numdecimalplace)

```

其中，Exp 代表要舍入结果的表达式，Numdecimalplace 为小数点后剩余的位数，与 C 语言的 %m.nf / %m.nlf 相似。

#### Len 获取字符串长度

Len 是以双精度形式返回字符串长度。

格式如下：

```
1	Len(String)

```

#### Left 获取开头裁剪字符串长度

Left 是返回从输入的字符串中裁剪的字符串。结果字符串从原始字符串的开头开始，并且长度有限。

格式如下：

```
1	Left(String,length)

```

其中，Length 代表字符串长度。

#### Right 获取结尾裁剪字符串长度

Right 是返回从输入的字符串中裁剪的字符串。结果字符串从原始字符串的末尾开始，并且长度有限。

格式如下：

```
1	Right(String,length)

```

Length 同上。

#### Mid 获取结尾裁剪字符串长度

Mid 是对输入的字符串进行裁剪并返回。返回的字符串从源字符串的给定点开始，并且长度有限。

格式如下：

```
1	Right(String,start,length)

```

其中，start 代表原始字符串的起点，Length 同上。

#### Replace 替换字符串

Replace 用来返回一个字符串，其中源字符串的某些部分被新部分替换。你可以在源字符串中定义要搜索的部分，以及替换的最大次数。

格式如下：

```
1	Right(exp,find,replacewith,start,count,compare)

```

其中，exp 代表原字符串，find 代表你要找那段字符串，replacewith 代表你要替换的那段字符串，count 代表替换次数，如果设置为 -1 可禁用限制，compare 代表是否区分大小写，0 为区分大小写。

#### Instr 搜索字符串

Instr 是返回给定字符串在另一个字符串中首次出现的点。

格式如下：

```
1	Instr(start,string1,string2)

```

其中，start 代表搜索的起点，string1 代表源字符串，string2 是要搜索的字符串。

### Character Function 字符函数

#### Get Character & ASCII Value 获取字符以及阿斯克码

##### Chr 字符

返回包含具有指定代码的字符的字符串。

格式如下：

```
1	chr(charcode)

```

其中，charcode 代表字符代码，以阿斯克码为准。

##### Asc 阿斯克码

获取给定字符串中第一个字符的字符代码。

格式如下：

```
1	asc(string)

```

其中，string 代表有效的字符串，如果对应的阿斯克码值超过127，可能会出现乱码的情况（雾，我没试过。）

#### Get Character & Unicode Value 获取字符以及万国码

##### Chrw 字符

返回包含具有指定代码的字符的字符串。

格式如下：

```
1	chrw(charcode)

```

其中，charcode 代表字符代码，以 Unicode 码为准。

##### Ascw Unicode 码

获取给定字符串中第一个字符的字符代码。

格式如下：

```
1	asc(string)

```

其中，string 代表有效的 Unicode 字符串。

#### Cdbl 转换字符串

Cdbl 是将字符串转换为双精度型数字。

格式如下：

```
1	cdbl(str)

```

#### Cstr 转换双精度数字

Cstr 将数字(双精度型)转换为字符串型。

格式如下：

```
1	cstr(exp)

```

### Game Content 游戏内容

#### Ncreate NPC创建

NCreate 是用来创建一个 NPC 以及返回被创建的 NPC 的永久 ID。

格式如下：

```
1	call NCreate(id,x,y,sx,sy,advset,cdata)

```

其中，id 为 NPC 的 ID，x 和 y 为创建的坐标，sx 和 sy 为创建出来的横向纵向坐标，advset 代表其他数据，cdata 代表创建信息，

关于 NPC 的 ID，请参考：SMBX教程 - NPC ID大全。

关于 NPC 的 Advset，请参考：SMBX 高级脚本教程 - NPC 高级数据。

关于 NPC 的 Cdata，有以下数值：

```
'CreateData Datas:
'P.S: This is Not TeaScript Codes.

'1 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=270,
'2 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=180,
'3 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=90,
'4 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=0,
'5 smbx\_npc.generate.effect=Warp, smbx\_npc.generate.Angle=270,
'6 smbx\_npc.generate.effect=Warp, smbx\_npc.generate.Angle=180,
'7 smbx\_npc.generate.effect=Warp, smbx\_npc.generate.Angle=90,
'8 smbx\_npc.generate.effect=Warp, smbx\_npc.generate.Angle=0,
'9 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=225,
'10 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=135,
'11 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=45,
'12 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=315,
'17 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=270, smbx\_npc.generate.noeffect=true
'18 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=180, smbx\_npc.generate.noeffect=true
'19 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=90, smbx\_npc.generate.noeffect=true
'20 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=0, smbx\_npc.generate.noeffect=true
'25 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=225, smbx\_npc.generate.noeffect=true
'26 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=135, smbx\_npc.generate.noeffect=true
'27 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=45, smbx\_npc.generate.noeffect=true
'28 smbx\_npc.generate.effect=Projectile, smbx\_npc.generate.Angle=315, smbx\_npc.generate.noeffect=true
'51 smbx\_npc.generate.effect=none, smbx\_npc.attribute.friendly=true

```

#### NKill NPC清除

NKill 是用来清除 NPC 或清除指定的所有 NPC。

NKill 分为两种情况。公用格式如下：

```
1	call NCreate(index,rx,ry,rw,rh,id,effect,score)

```

其中，effect 为是否显示即将死亡的效果，设置 0 为禁用效果，其他值为显示，score 为设置是否删除 NPC 的同时带来分数的增加，设置 0 为禁用计分，其他值为启用积分。

##### NKill Index

NKill Index 是指删除指定的NPC(Index 值 为 0)、所有接触矩形框的 NPC (Index 值 为 -1)以及删除矩形框中的所有 NPC(Index 值 为 -2)。

格式如下：

```
1	call NCreate(0,0,0,0,0,0,0,effect,score) 'Delete Specified NPC.
2	'Or
3	call NCreate(-1,rx,ry,rw,rh,id,effect,score) 'Delete Touched inside Area All NPC.
4	'Or
5	call NCreate(-2,rx,ry,rw,rh,id,effect,score) 'Delete Inside area All NPC.

```

其中，rx 和 ry 为矩形框的开始坐标，rw 和 rh 为矩形框的宽高度，id 为要删除的 NPC。id 如果为 0 则删除所有 NPC。

##### NKill NPCID

NKill NPCID 是指删除所有接触矩形框的 NPC 以及删除矩形框中的所有 NPC。

格式如下：

```
1	call NCreate(index,0,0,0,0,0,effect,score)

```

其中，Index为大于 0 的数，所对应的是NPC ID。

#### GetID 获取永久ID

GetID 是用来获取一个NPC的永久ID。

格式如下：

```
1	getID(permid)

```

其中，permid 代表永久ID。

#### GetIDByName 获取对象名称

GetIDByName 是查找具有给定名称的对象。

格式如下：

```
1	getIDByName(Name)

```

#### ItrCreate 迭代器

迭代器（iterator）有时又称光标（cursor）是程序设计的软件设计模式，可在容器对象（container，例如链表或数组）上遍访的接口，设计人员无需关心容器对象的内存分配的实现细节。 - 来自百度百科

该函数所涉及的知识比较麻烦，这里直讲最基础的部分。如果需要看比较进阶的迭代器的使用，请访问：

该函数可以应用到变量里，通过一系列调教可以使其发挥更好的效果。

格式如下：

```
1	ItrCreate(type,id,x,y,w,h)
2	'Type Value types:
3	'1 Block
4	'2 NPC
5	'3 Background Object
6	'11 Block on screen
7	'12 Activing NPC

```

其中，type 代表迭代的对象类型，x 和 y 代表过滤器矩形范围的起始坐标点，w 和 h 代表矩形范围的宽度和高度，迭代器仅迭代给定矩形区域内的对象，id 是迭代器的ID，如果没有ID过滤，则将其设置为0，否则迭代器将仅迭代具有相同图像文件ID的对象。

如果此函数失败，则返回0。可使用 BErase 销毁迭代器。

注意：迭代器有时候创建失败会导致整个迭代器系统失效。此时你只能重启才能使其迭代器起作用，或使用循环指令不断调用 BErase 尝试销毁。

#### ItrNext 迭代下一个对象

ItrNext 是用来传递给迭代下一个对象。对象不存在的话就返回 0，并销毁。

该函数可以应用到变量里，通过一系列调教可以使其发挥更好的效果。

格式如下：

```
1	ItrNext(IteratorID)

```

IteratorID 代表迭代器ID，不存在或结束就返回 0.

#### BSet 修改属性

**疑难点**

本段落所描述的可能很单薄，容易让人产生疑问，请提供更多的信息。

BSet 是用来修改 已经指定的 Class 性质（这点可以在编辑器里右键NPC，BGO和Block里发现。）

目前该函数是属于隐藏不被公开的函数，目前已知以下格式：

```
call BSet(Class,ID,FlagID,P1,P2,P3)

```

其中，Class 代表要指定的对象：目前已知的数值如下：

* 2 NPC Class

ID 代表对象中的对象（不是套娃，而是你针对的Class对象里的对象，比如你针对了NPC的对象，那么该ID指定的是NPC对象里的ID对象。）

FlagID 代表修改性质ID。

已知的 Flag ID 属性如下：（当你指定Type为NPC Class时）

### HUD Beautify HUD 美化

HUD 是游戏里最重要的显示信息的部位，每个游戏都有对应的 HUD，所显示的信息是不一样的，就好比系统是投影机，而 HUD 是投射出去给对面的屏幕展示的信息，供给大家参观。

往往 HUD 一般为默认的 SMBX GUI 为标准，如果想做出不一样的效果的话，就需要用好每一个调教 HUD 的函数。往往我们提倡显示画面不要太杂也不要太简。

往往美化比较好设计比较好的 HUD 能给人带来的印象会更好，当然，如果允许的话，还可以通过调教变量以及其他函数做到动态效果，想了解更进阶的 SMBX HUD 脚本的话，请访问：

#### HUDSet HUD 调教

一般情况下，我们使用 HUDSet 会更方便的调教 GUI。一般高级一点的高手会使用其他两个函数进行调教。

格式如下：

```
1	call HUDSet(command,p1,p2,p3,p4,p5,p6,p7,p8,p9)

```

这是一个多元素的函数，多元素是指里面对应的参数会随着前面的变化而变化。可以是 Function("Mario",p2,p3,p4)，也可以是 Function("Rosalina",p2,p3,0) 等等。所对应的函数参数与前面的 "Command" 有关。

##### Initialize 初始化&清除所有已有元素

Initialize 顾名思义，初始化HUD，该指令会强制初始化并清除所有已经放在上面的 HUD 元素。

格式如下：

```
1	call HUDSet("Initialize",0,0,0,0,0,0,0,0,0)

```

从 P1 到 P9 的值全部为 0，设置其他数不起作用。

##### Destroy 禁用并清除所有已有元素

Destroy 指的是将禁用 HUD 系统以及清除所有已经放在上面的 HUD 元素。

格式如下：

```
1	call HUDSet("Destroy",0,0,0,0,0,0,0,0,0)

```

从 P1 到 P9 的值全部为 0，设置其他数不起作用。

##### Bitmap Elements 图形元素

Bitmap 指位图，就是将图形数据放在 HUD 上。

格式如下：

```
1	call HUDSet("Bitmap",id,sx,sy,sw,sh,x,y,advset,color)

```

其中，ID 是指该 HUD 的 ID 编号，代表当前的 Bitmap 的序列号，sx 和 sy 是从源文件的开始点坐标，sw 和 sh 是源文件的开始点坐标开始剪裁大小，dx 和 dy 代表当前游戏屏幕上的点坐标。注意不是关卡坐标。

Advset 比较特殊，其中：

Advset 如果是非0的值的话，则 sx 和 sy 将不采用，所对应的，sw 和 sh 成为绘图的拉伸比。

Color 为某种颜色，可以是函数(rgba(rval,gval,bval,aval))的组合，也可以是十进制数。公式为：

alpha \* 16777216 + red \* 65536 + green \* 256 + red
但要注意，颜色值采用 int 值，因此最大数只能是 2147483647，当再次加 1 的话，就会转变为 -2147483648，此时程序才不会关注这些，会继续加以上公式的值，直到加完为止。

因此，下面的例子：rgba(54,218,39,255)

##### Text Elemets 文本元素

Text 指文本，就是将一段文本放在 HUD 上。

格式如下：

```
1	call HUDSet("Text:文本",id,dx,dy,sasc,easc,lnum,npcid,color,-1)

```

其中，ID 是指该 HUD 的 ID 编号，代表当前的 Text 的序列号，但和 Bitmap 的序列号不通用。dx 和 dy 代表当前游戏屏幕上的点坐标。

sasc 是 NPC 图像字体的开始的阿斯克码值，easc 是 NPC 图像字体的最后一个阿斯克码值。

注意的是，图像文本如果不包含对应的阿斯克码值（比如起始为'A'(65)，你却输入了'@'(64)，那么在解析该文本并应用字体时将忽略当前格的阿斯克码字符。（说人话就是不存在的不给位置存在。））

lnum 是 NPC 图像字体的单行的字符数：比如设为 16 就是对应的图像字体的单行字符数是 16。

npcid 是用作字体的 NPC 的 ID，使用 NPC 图像文件名中的数字作为 ID。

color 参考：HUDSet Bitmap 中的 Color 计算方法。

Text:文本 后面的"文本"是指要输入的字符串文本，如果需要在里面输入动态数据的话，请使用 &type 地址符代替，可以用的地址符如下：&val（本地变量）&gvl（全局变量）&sys（系统变量）。

#### TXTCreate 文本创建器

TXTCreate 是美化关卡以及 HUD 的另一种方式，他的特点是能固定在关卡里充当提示用语或在 HUD 上显示玩家信息以及其他文本。而且后期还可以调整对应的优先级（尤其是做暗黑场景最适用。）以及参数。（可以使用 Text(ID).param 调整。）

格式如下：

```
1	call TXTCreate(id,x,y,sasc,easc,cdata,lnum,fontid,flag,text)

```

其中，ID 为 文本的专属 ID 序列号，可以和图像，迭代器等可以用 BErase 的 ID 通用，x 和 y 为坐标，受后面的 flag 影响。sasc、easc 和 lnum 与 HUDSet 描述的一样，fontid 与 HUDSet 的 npcID一样，flag 为固定类型，0 为关卡坐标系，1 为屏幕，text 代表一段字符串，可以用"&"连接。

#### BMPCreate 图像创建器

BMPCreate 是美化关卡以及 HUD 的另一种方式，它的特点是可以将图像嵌在关卡上或在 HUD 上充当标志。与 Text 一样可以调整优先级和参数，高级一点的，可以调整图像的混合方式，但混合模式不在基础脚本的范畴，想了解的话请访问：

格式如下：

```
1	call BMPCreate(id,picid,flagpos,flagshow,sx,sy,sw,sh,dx,dy,scx,scy,pcx,pcy,angle,color)

```

其中，ID 为 图像的专属 ID 序列号，与 Text 一样可以通用。flagpos 为固定坐标类型，0 为关卡坐标系，1 为屏幕，flagshow 为显示或隐藏，0 为隐藏，1 为显示，dx 和 dy 同上，受 flagpos 影响。sx 和 sy 是从源文件的开始点坐标，sw 和 sh 是源文件的开始点坐标开始剪裁大小，scx 和 scy 为拉伸比，默认为 1，pcx 和 pcy 为拉伸或旋转的中心坐标（可以理解为锚点），angle 为旋转角度。color 参考：HUDSet Bitmap 中的 Color 计算方法。

#### BErase 销毁器

BErase 是一种可以销毁某个 HUD 的元素的函数。

格式如下：

```
1	call Berase(type,id)

```

其中，type 为删除类型，0 为迭代器，1 为文本，2 为图像。id 为对象的序列号 ID。

如果想阅览 SMBX 基础脚本当前页的下一个内容，请访问：**SMBX 基础脚本 4 隐藏的内容**