[TOC]
* * * * *
## 脚本编辑器(Script Editor)
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-11-12-20-50.png)
在GameMaker Studio 2中有许多地方都可以编写代码,无论是对象、场景还是各个实例,并且GML和拖放编程模式都内置了大量函数来让降低编码的难度。但是你仍然会需要自己创建一些特殊的方法来进行调用,或是有个别方法你会在许多地方都要复用,为了方便管理而需要把一部分代码单独存放,这就是脚本存在的意义。
> 注意:本节所涉及的脚本,在脚本中编写的代码与“事件”、“场景”或“实例”中创建的代码相同,本节所说的功能适用于所有脚本。
>
> 注意:本页面介绍的都是用GML语言编写脚本,但你也可以用拖放模式来创建脚本。无论用什么方式编写代码,本页介绍的编辑器本身的功能全部适用。
脚本都是用GML语言编写的(详细的GML介绍可参考GML概述),这是GameMaker Studio 2内置的编程语言。一旦你逐渐熟悉了GameMaker Studio 2,并希望能做些更复杂的东西时,建议你开始学习GML语言,因为这可以更大扩展了制作游戏的可能性。你还可以使用拖放编程的方式来编写脚本,但是这需要另一套编辑器,这会在“操作脚本”的章节进行介绍,同样可以使用不同的输入变量、字符串、布尔值和各种特殊的值,这些值通常被称为实参,偶尔也被称为形参。如果你需要在对象中调用这个脚本,你可以把脚本名称作为GML语言的函数名来使用。你可以在资源树中右键单击并选择重命名来给脚本重新命名,需要注意,脚本名称必需符合函数的脚本规则,必需以字母开头,并且名称中只包含字母、数字以及下划线“_”符号。
如上所述,你可以通过参数把一个数字传递给一个脚本,并使用这个参数来执行你所编写的任务代码。为了便于理解举一个例子,设想一个拖放操作(或是用GML写的代码),仔细想想它是如何工作的……你把它放在一个事件的代码区中,指定一些参数,它的实例就会根据你的要求行动。其实代码是完全一样的,唯一的区别是这是你自己编写的。我们不仅可以向脚本传递参数,同时也可以要求脚本返回某些值(使用return方法),因此我们可以用这个方法来构建复杂的计算方法(数学方法)或是进行一个复杂的碰撞检测或其它任意事情。但务必注意,返回方法应该在脚本最末的地方,确保在返回值之后没有任何需要执行的代码,因此你需要提前想好脚本的代码结构。
当你首次创建资源时,会打开脚本编辑器,其中包含以下选项:
### 脚本标签
脚本编辑器的窗口顶部有一个标签选项卡,这让你可以同时打开编辑多个脚本(也可以在首选项中修改设置,改为每个脚本一个独立窗口)。你可以单击脚本标签,然后拖放进行排序操作,或者也可以将选项卡从窗口中拖出来形成一个独立窗口并单独放置到工作区中。如果将脚本标签直接拖出IDE窗口,则会生成一个独立的新的IDE窗口来存放该脚本,与主窗口的使用完全一致。
### 编辑操作
这里是创建脚本编写代码的主要区域,脚本需遵循GML语法规则进行编写(详细需参阅“GML概述”部分),而且编辑器自带补全提示功能:
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-12-11-39-11.png)
当你编写代码时,编辑器内会弹出(一般会有少许延迟,可在首选项中设置)提示窗口,其中会以首字母顺序依次排列可能相关的方法、参数等内容,您可以从中选择您需要的那项。在使用代码编辑器时,你还可以选中一行代码,然后使用Ctrl+C,Ctrl+X和Ctrl+V等标准的快捷键来进行复制、剪切和粘贴的操作。
在编写代码的过程中,你可能会不小心写错,这时候IDE就会警告你犯错了,它会在出错的那一行前标记红色然后还有一个红色的感叹号“!”图标,此时你把鼠标放到错误提示区可以看到简单的错误描述,在输出窗口则会有完整的错误信息:
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-12-11-39-22.png)
另外,你可以在代码中进行注释。注释对代码而言十分重要,它能把代码进行分割,保持更清晰的结构,让人一目了然为什么这些代码会在各自的位置。另外如果你与团队其他成员一起协作时,注释可以作为有效的笔记,让其他人能明白你已经做了些什么。即使你是独自一人进行开发,保留代码注释也十分重要,特别是你有其它事情导致你暂时放下了这个项目,一段时间后再回来看它时,能更快回忆起当初的工作内容。
为代码做注释非常简单,你只需要在任何文本行的开头敲下“//”即可,或者也可以用段落注释,格式是“/* 注释内容 */”。另外也可以用快捷键直接操作Ctrl+K是标记注释,Ctrl+Shift+K则是取消注释格式,下图是两种注释格式示例
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-12-11-39-29.png)
脚本中还可以支持JSDoc类型的注释,这样你就可以现在JSDoc中定义好一些通用的内容,然后在编辑代码时会显示在自动完成提示列表中。
你可能已经注意到了,脚本中的文本颜色有些是彩色的。这是脚本编辑器在解析了对象中内置的变量、函数等内容,然后根据配置对不同内容进行了颜色编码,这种颜色编码有助于你看的更加清晰不容易出错,假如你拼写了错误的名称或关键词就会立刻得到提示,但如果你不喜欢这种颜色编码也可以在首选项中选择关闭(或使用F10),其中也可以自定义不同的颜色编码。
在编辑器中任意位置右键单击可以打开以下菜单
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-12-11-39-35.png)
除了常规的剪切、复制和粘贴等功能外,你还可以选择将选中的文本设置为注释格式,添加或删除缩进,或将代码窗口分割为1、2、3行来显示。最后的这些选项可以让你把窗口分割显示以方便在其中拖放不同的脚本来比对其中的内容:
![](http://7xqa61.com1.z0.glb.clouddn.com/Wechat/GMS文档翻译草稿/编辑器窗口/_image/2017-05-12-11-39-40.png)
这种浏览方式在比对或需要同时查看两个脚本时会非常有效,可以避免再开一个窗口或在几个标签之间来回切换。菜单里还有一个在Debug模式下使用断点的选项,最后是一个将脚本在GML代码模式和DnD拖放模式下切换的选项。要注意,如果把代码转换为DnD拖放代码块时,并不会为每一行代码单独创建独立的操作,而是用一个专门的区块把原先所有的代码都存放在其中。
在编辑脚本时,你还可以使用代码片段的功能来提高效率。按下F4(译者注:官方手册写的是F2但已经过时了,现在应该是F4)键就会弹出一个代码片段窗口,你可以自定义自己需要的代码片段,只需要把他们保存到GameMaker Studio 2的目录下:\GameMaker Studio 2\TextEditor\snippets.txt中即可,你可以用任何文本编辑器来编辑这个文件:
* 每个代码片段都是单独的一行(不能有空行)
* 每个代码片段都以片段名称为开头(会显示在弹出列表中),名称后跟一个冒号“:”,后面再接具体的代码段
* 使用"#"号作为换行符,并把需要被选中的文字放到两个"|"号之间(译者目测无效)
请参考文件中现成的代码段例子,以了解该如何按照上述规则来编写自己的代码段,强烈建议你在进行修改操作之前首先备份一下该文件,并备份你所做的任何修改操作,因为一旦重新安装或更新GameMaker Studio 2都会重置该文件,此时你可以用你备份的文件来恢复你之前所做的修改。
> 译者注:下面贴出来的这段是目前默认的snippets文件中的预设内容
>
> 1 - block:{# |STATEMENT|;#}#
>
> 2 - if:if (|CONDITION|)#{# STATEMENT;#};#
>
> 3 - if-else:if (|CONDITION|)#{# STATEMENT;#}#else#{# STATEMENT;#};#
>
> 4 - for:for (|INITIALISATION|; CONDITION; INCREMENT)#{# STATEMENT;#};#
>
> 5 - for i:for (i=0; i
>
> 6 - while:while (|CONDITION|)#{# STATEMENT;#};#
>
> 7 - do:do#{# |STATEMENT|;#}#until (CONDITION);#
>
> 8 - repeat:repeat (|EXPRESSION|)#{# STATEMENT;#};#
>
> 9 - switch:switch (|EXPRESSION|)#{# case EXPRESSION: STATEMENT; break;# default: STATEMENT;#}#
>
> 0 - with:with (|EXPRESSION|)#{# STATEMENT;#};#
>
> comment:// |TEXT|
>
> multiline comment:/***************************************************# |TEXT|# ***************************************************/
### 信息栏
IDE底部的信息栏会显示你当前编辑的行数以及所在的位置。同时也是一个代码提示器,它会以文本的形式提示你正在编辑的功能或函数所需的参数等信息。当你在编辑器中编写相关函数代码时,此处会突出显示该函数对应所需的参数。如果你在JSDoc脚本注释中自定义了帮助信息,这里也会进行相应的提示。
- 介绍
- 新手须知
- 版本授权
- 安装
- 更新
- 发布日志
- 所需SDK
- 账号
- 首选项设置
- 拖拽编程
- 扩展编辑器设置
- 基本项设置
- 图片编辑器设置
- 语言设置
- 市场设置
- 对象编辑器设置
- 插件设置
- 资源树设置
- 场景编辑器设置
- 运行库设置
- 样条编辑器设置
- 精灵编辑器设置
- 文本编辑器设置
- 瓷片编辑器设置
- 时间轴设置
- 输入
- 快速上手
- 概览
- 启动页
- 工作区
- 资源树
- 工作流
- 创建精灵
- 创建瓷片集
- 创建音频
- 创建对象
- 创建场景
- 编译
- 调试
- 快捷键
- 菜单
- 文件菜单
- 编辑菜单
- 构建菜单
- 窗口菜单
- 工具菜单
- 市场菜单
- 帮助菜单
- 布局菜单
- 附加信息
- 位运算符和二进制
- 命令行
- 出错信息
- 文件系统
- 导入非位图精灵
- JSDoc使用
- 微型WEB服务端
- 过时函数
- 纹理页
- 使用缓冲区
- 编辑器
- 扩展编辑器
- 字体编辑器
- 图像编辑器
- 内含文件编辑器
- 备注编辑器
- 对象编辑器
- 路径编辑器
- 场景编辑器
- 脚本编辑器
- 着色器编辑器
- 音频编辑器
- 精灵编辑器
- 瓷片集编辑器
- 时间轴编辑器
- 对象可用事件
- 异步事件
- 绘制事件
- 手势事件
- 其它
- 调试管理器
- 设备管理器
- YoYo资源市场
- 输出停靠栏
- 项目图生成器
- 最近使用窗口
- 远程工作
- 混音器
- 版本控制
- 设置项
- 音频组
- 配置项
- 跨平台配置
- 纹理组
- 游戏配置选项
- AmazonFire 配置
- Android配置
- HTML5配置
- iOS配置
- Linux配置
- Mac配置
- Windows配置
- WindowsUWP配置
- 脚本编程
- 拖放编程概览
- 拖放编程功能索引
- GML概览
- 代码
- 数组
- array_create
- array_copy
- array_equals
- array_length_1d
- array_height_2d
- array_length_2d
- 赋值
- 表达式
- 数据存取
- 功能性语法
- 函数
- 脚本
- 注释
- 关键词
- 变量及作用域
- variable_global_exists
- variable_global_get
- variable_global_set
- variable_instance_exists
- variable_instance_get
- variable_instance_get_names
- variable_instance_set
- 寻址变量
- 评估顺序
- 数据类型
- is_array
- is_bool
- is_int32
- is_int64
- is_matrix
- is_ptr
- is_real
- is_string
- is_undefined
- is_vec3
- is_vec4
- 变元计数
- 指针
- 内置变量属性
- async_load
- health
- lives
- score
- GML函数索引
- asset_get_index
- asset_get_type
- Compatibility_Functions
- Asynchronous Functions
- Audio
- Buffers
- Cameras And Display (摄像机和显示)
- Cameras(摄像机)
- camera_apply
- camera_create
- camera_create_view
- camera_destroy
- camera_get_active
- camera_get_begin_script
- camera_get_default
- camera_get_end_script
- camera_get_proj_mat
- camera_get_update_script
- camera_get_view_angle
- camera_get_view_border_x
- camera_get_view_border_y
- camera_get_view_height
- camera_get_view_mat
- camera_get_view_speed_x
- camera_get_view_speed_y
- camera_get_view_target
- camera_get_view_width
- camera_get_view_x
- camera_get_view_y
- camera_set_begin_script
- camera_set_default
- camera_set_end_script
- camera_set_proj_mat
- camera_set_update_script
- camera_set_view_angle
- camera_set_view_border
- camera_set_view_mat
- camera_set_view_pos
- camera_set_view_size
- camera_set_view_speed
- camera_set_view_target
- view_camera
- view_current
- view_enabled
- view_get_camera
- view_get_hport
- view_get_surface_id
- view_get_visible
- view_get_wport
- view_get_xport
- view_get_yport
- view_hport
- view_set_camera
- view_set_hport
- view_set_surface_id
- view_set_visible
- view_set_wport
- view_set_xport
- view_set_yport
- view_surface_id
- view_visible
- view_wport
- view_xport
- view_yport
- The Screen Display
- Controls
- Data_Structures(数据结构)
- ds_exists
- ds_set_precision
- DS Grids
- DS Lists(列表)
- ds_list_create
- ds_list_destroy
- ds_list_clear
- ds_list_empty
- ds_list_size
- ds_list_add
- ds_list_set
- ds_list_delete
- ds_list_find_index
- ds_list_find_value
- ds_list_insert
- ds_list_replace
- ds_list_shuffle
- ds_list_sort
- ds_list_copy
- ds_list_read
- ds_list_write
- ds_list_mark_as_list
- ds_list_mark_as_map
- DS Maps(映射表)
- ds_map_exists
- ds_map_create
- ds_map_add
- ds_map_clear
- ds_map_copy
- ds_map_replace
- ds_map_delete
- ds_map_empty
- ds_map_size
- ds_map_find_first
- ds_map_find_last
- ds_map_find_next
- ds_map_find_previous
- ds_map_find_value
- ds_map_read
- ds_map_write
- ds_map_destroy
- ds_map_secure_save
- ds_map_secure_save_buffer
- ds_map_secure_load
- ds_map_secure_load_buffer
- ds_map_add_list
- ds_map_add_map
- ds_map_replace_list
- ds_map_replace_map
- DS Priority Queues
- DS Queues
- DS Stacks
- Debugging
- Drawing
- draw_enable_drawevent
- draw_flush
- Colour(颜色)
- colour_get_blue
- colour_get_green
- colour_get_hue
- colour_get_red
- colour_get_saturation
- colour_get_value
- draw_clear
- draw_clear_alpha
- draw_get_alpha
- draw_get_colour
- draw_getpixel
- draw_getpixel_ext
- draw_set_alpha
- draw_set_colour
- make_colour_hsv
- make_colour_rgb
- merge_colour
- Forms
- draw_arrow
- draw_button
- draw_circle
- draw_circle_colour
- draw_ellipse
- draw_ellipse_colour
- draw_healthbar
- draw_line
- draw_line_colour
- draw_line_width
- draw_line_width_colour
- draw_path
- draw_point
- draw_point_colour
- draw_rectangle
- draw_rectangle_colour
- draw_roundrect
- draw_roundrect_colour
- draw_roundrect_colour_ext
- draw_roundrect_ext
- draw_set_circle_precision
- draw_triangle
- draw_triangle_colour
- GPU
- gpu_get_alphatestenable
- gpu_get_alphatestref
- gpu_get_blendenable
- gpu_get_blendmode
- gpu_get_blendmode_dest
- gpu_get_blendmode_destalpha
- gpu_get_blendmode_ext
- gpu_get_blendmode_ext_sepalpha
- gpu_get_blendmode_src
- gpu_get_blendmode_srcalpha
- gpu_get_colorwriteenable
- gpu_get_cullmode
- gpu_get_fog
- gpu_get_state
- gpu_get_texfilter
- gpu_get_texfilter_ext
- gpu_get_texrepeat
- gpu_get_texrepeat_ext
- gpu_get_zfunc
- gpu_get_ztestenable
- gpu_get_zwriteenable
- gpu_pop_state
- gpu_push_state
- gpu_set_alphatestenable
- gpu_set_alphatestref
- gpu_set_blendenable
- gpu_set_blendmode
- gpu_set_blendmode_ext
- gpu_set_blendmode_ext_sepalpha
- gpu_set_colorwriteenable
- gpu_set_cullmode
- gpu_set_fog
- gpu_set_state
- gpu_set_texfilter
- gpu_set_texfilter_ext
- gpu_set_texrepeat
- gpu_set_texrepeat_ext
- gpu_set_zfunc
- gpu_set_ztestenable
- gpu_set_zwriteenable
- Lighting
- draw_get_lighting
- draw_light_define_ambient
- draw_light_define_direction
- draw_light_define_point
- draw_light_enable
- draw_light_get
- draw_light_get_ambient
- draw_set_lighting
- Mipmapping
- gpu_get_tex_max_aniso
- gpu_get_tex_max_aniso_ext
- gpu_get_tex_max_mip
- gpu_get_tex_max_mip_ext
- gpu_get_tex_min_mip
- gpu_get_tex_min_mip_ext
- gpu_get_tex_mip_bias
- gpu_get_tex_mip_bias_ext
- gpu_get_tex_mip_enable
- gpu_get_tex_mip_enable_ext
- gpu_get_tex_mip_filter
- gpu_get_tex_mip_filter_ext
- gpu_set_tex_max_aniso
- gpu_set_tex_max_aniso_ext
- gpu_set_tex_max_mip
- gpu_set_tex_max_mip_ext
- gpu_set_tex_min_mip
- gpu_set_tex_min_mip_ext
- gpu_set_tex_mip_bias
- gpu_set_tex_mip_bias_ext
- gpu_set_tex_mip_enable
- gpu_set_tex_mip_enable_ext
- gpu_set_tex_mip_filter
- gpu_set_tex_mip_filter_ext
- Particles
- Particle Emitters
- part_emitter_burst
- part_emitter_clear
- part_emitter_create
- part_emitter_destroy
- part_emitter_destroy_all
- part_emitter_exists
- part_emitter_region
- part_emitter_stream
- Particle Systems
- part_particles_clear
- part_particles_count
- part_particles_create
- part_particles_create_colour
- part_system_automatic_draw
- part_system_automatic_update
- part_system_clear
- part_system_create
- part_system_create_layer
- part_system_depth
- part_system_destroy
- part_system_draw_order
- part_system_drawit
- part_system_exists
- part_system_get_layer
- part_system_layer
- part_system_position
- part_system_update
- Particle Types
- part_type_alpha1
- part_type_alpha2
- part_type_alpha3
- part_type_blend
- part_type_clear
- part_type_colour_hsv
- part_type_colour_mix
- part_type_colour_rgb
- part_type_colour1
- part_type_colour2
- part_type_colour3
- part_type_create
- part_type_death
- part_type_destroy
- part_type_direction
- part_type_exists
- part_type_gravity
- part_type_life
- part_type_orientation
- part_type_scale
- part_type_shape
- part_type_size
- part_type_speed
- part_type_sprite
- part_type_step
- Simple Effects
- ef_cloud
- ef_ellipse
- ef_explosion
- ef_firework
- ef_flare
- ef_rain
- ef_ring
- ef_smoke
- ef_smokeup
- ef_snow
- ef_spark
- ef_star
- effect_clear
- effect_create_above
- effect_create_below
- Primitives(基本几何体)
- draw_primitve_begin
- draw_primitive_begin_texture
- draw_primitive_end
- draw_vertex
- draw_vertex_colour
- draw_vertex_texture
- draw_vertex_texture_colour
- Primitive Building
- vertex_argb
- vertex_begin
- vertex_colour
- vertex_create_buffer
- vertex_create_buffer_ext
- vertex_create_buffer_from_buffer
- vertex_create_buffer_from_buffer_ext
- vertex_delete_buffer
- vertex_end
- vertex_float1
- vertex_float2
- vertex_float3
- vertex_float4
- vertex_freeze
- vertex_get_buffer_size
- vertex_get_number
- vertex_normal
- vertex_position
- vertex_position_3d
- vertex_submit
- vertex_texcoord
- vertex_ubyte4
- Vertex Formats
- vertex_format_add_colour
- vertex_format_add_custom
- vertex_format_add_normal
- vertex_format_add_position
- vertex_format_add_position_3d
- vertex_format_add_textcoord
- vertex_format_begin
- vertex_format_delete
- vertex_format_end
- Sprites_and_Tiles
- draw_enable_swf_aa
- draw_get_swf_aa_level
- draw_self
- draw_set_swf_aa_level
- draw_skeleton
- draw_skeleton_collision
- draw_skeleton_instance
- draw_skeleton_time
- draw_sprite
- draw_sprite_ext
- draw_sprite_general
- draw_sprite_part
- draw_sprite_part_ext
- draw_sprite_pos
- draw_sprite_stretched
- draw_sprite_stretched_ext
- draw_sprite_tiled
- draw_sprite_tiled_ext
- draw_tile
- draw_tilemap
- Surfaces
- application_get_position
- application_surface
- application_surface_draw_enable
- application_surface_enable
- application_surface_is_enabled
- draw_surface
- draw_surface_ext
- draw_surface_general
- draw_surface_part
- draw_surface_part_ext
- draw_surface_stretched
- draw_surface_stretched_ext
- draw_surface_tiled
- draw_surface_tiled_ext
- surface_copy
- surface_copy_part
- surface_create
- surface_create_ext
- surface_exists
- surface_free
- surface_get_height
- surface_get_texture
- surface_get_width
- surface_getpixel
- surface_getpixel_ext
- surface_reset_target
- surface_resize
- surface_save
- surface_save_part
- surface_set_target
- surface_set_target_ext
- The Application Surface
- Text
- draw_highscore
- draw_set_font
- draw_set_halign
- draw_set_valign
- draw_text
- draw_text_colour
- draw_text_ext
- draw_text_ext_colour
- draw_text_ext_transformed
- draw_text_ext_transformed_colour
- draw_text_transformed
- draw_text_transformed_colour
- Textures
- draw_texture_flush
- texture_get_height
- texture_get_texel_height
- texture_get_texel_width
- texture_get_uvs
- texture_get_width
- texture_global_scale
- texture_set_stage
- File Handing
- Fonts
- Game
- In App Purchases
- Instances
- 数学运算(Maths)
- Date and Time
- 数字方法(Number Functions)
- Vector Functions
- Matrices
- Miscellaneous
- Movement and Collisions
- Networking
- Objects
- Paths
- Physics
- 场景(Rooms)
- 常规的场景函数及变量(General Room Functions And Varibales)
- 常规图层函数(General Layer Functions)
- 瓷片函数(TIlemap Tile Functions)
- 背景图层(Backgrounds)
- 精灵图层(Sprites)
- Scirpts
- Shaders
- Sprites
- Steam API
- Strings
- Timelines
- Web
- XBox_Live
- 翻译名词对照表