## 创建对象
有了迄今为止所看到的资源之后,您也可以在资源树中添加一些优质的图像和声音,但是游戏本身并没有任何进展!为此,我们需要创建 GameMaker Studio 2 最重要的资源,即对象资源。对象是我们用来控制游戏的各个方面以及做特定事情的特殊资源。大多数时候,他们会有一个与其相关联的精灵,以便可以在游戏房间中看到他们,但有时他们被用作“幕后”控制器来做与用户有关的事情或计时等。他们可以被赋予行为,他们可以对某些事件以及对彼此做出反应,而且在游戏中看到的大部分事物都是基于对象及其相互作用的。 重要!在用 GameMaker Studio 2 制作的游戏中,角色,怪物,球,墙等等都是从资源树中找到的基本对象模板中复制的,然后放置在一个房间中。所以当我们谈论影响或改变一个实例时,我们的意思是某个房间中某个对象的一个特定副本受到影响,而其余的则不受影响,但是当我们谈论影响或改变一个对象时,我们的意思是我们所做的所有事情也将反映在对象所衍生的所有实例中。所以,对象是实例的模板,实例是我们用来放置在房间里制作游戏的。 要创建一个新的对象资源,与其他资源相同,只需右键单击对象资源文件夹并选择创建。
![](https://lh6.googleusercontent.com/z5K23foD14rqQKvNHsYgRxEFsmJG3ttk33QQnOznYcaltanGOzLxkNNiVcVctr6v1w19T7Egpf4vijBZWqxIyrdbsNaPRm7GmMSh2ccwUz_Nz0wfhnXpBQvzl75m0eFim2ty5enV)
这是对象编辑器窗口,显示当前属性,你首先应该做的事情是使用“obj_”或其他标识符等前缀命名对象。 一般来说,除非这个对象用来绘制一些事物,或者与其他对象的实例产生碰撞,否则它需要有一个精灵,可以使用按钮![](https://lh3.googleusercontent.com/pQRHSxz9xI26zkW5WJKsPDqlp59Woj25yBRS0E2xesPMsh0EPbAzDgAV3ghryFJbcUOGShTuOE6qLlZzaRf864wG5sRA3bo2Cj_ad9JhxSsRt_2xR_oZ8iKSu-zIPLAPTx4nG7J1)添加。 这将会打开资源管理器,您可以在其中选择要使用的精灵:
![](https://lh3.googleusercontent.com/-cAxdgOU885NoLQz5FIaxiol45nPA_QLZZ_GYv-Zdh3TGeCfR5aM46Yu6iThLSyQa2fth5fnplP8LnF5hJJ1FJmeiVs_pb6JUnRzhOFku1JklPdIikA13wElkATd7pRizjtOOyx_)
如果你还没有合适的精灵,你可以点击创建精灵按钮来创建一个新的精灵资源并按照你的意愿来进行编辑,就像你通过标准资源创建选项来创建资源一样,只是现在它会自动分配给您开始创建前所打开的对象。 一旦你选择一个资源,你也可以点击编辑精灵或编辑图像按钮来编辑图像本身或精灵资源。 这比首先在资源列表中查找资源然后再进行编辑资源可能要快。
一旦选择了精灵,你可以改变一些其他属性,比如它是否可见 , 或者它应该具有什么形状的碰撞盒。 对于简单的游戏来说,你可能不需要在这里改变一些属性。现在继续,添加一些事件到对象。 基本上,事件是游戏循环中根据你为它们所做的设计发生事情的重要时刻。 GameMaker Studio 2 根据这些事件组成的循环来进行工作 - 一个房间从开始到完成,即为一个游戏循环运行,每一步(游戏时间的一个步骤,由游戏速度控制) 一系列事件将会运行,您可以选择将代码或拖放模块放入响应这些事件的实例中。 要添加事件,请单击“添加事件”按钮:
![](https://lh3.googleusercontent.com/7hCNrQmwT4u2U9NeArGRsfwCUmZk9C92h5B84hLDuBLT3lnirmKReLtx8h7YcAuwCzLYFWajf3pmiderfnZkHnqL9Nqjgwbq2xtZt3qm2jxW1PZ_0D-hT-2MzJUOPEkKg5afvFyN)
在上面的图片中,您可以看到所有的事件类别,其中一些还包含子类别。 我们不会在这里介绍所有种类的事件,但我们会简要地介绍五个最重要的事件:
![](https://lh3.googleusercontent.com/1emnYBmJGxc0Kr3s15JY2XSbhj8M7nZQc6xWQGq7UVG47odxEsSLIBuBjCibdIIYiEns8KS-65bMEPU3ma9H_OYRUHT6kTqTPJBeRp05ROEVE_MhAKDVTL8ClvujNP3_y4PUkf1t) 创建事件 当一个对象的实例第一次被创建时,这个事件就会发生,并且是在进入房 间时通过房间编辑器放置在房间中的实例发生的第一件事情。 这意味着这个事件是进行初始化变量,启动时间轴,设置路径以及只需要执行一次或者只有当一个实例第一次出现在房间里时才做的事情的最理想方式。
![](https://lh5.googleusercontent.com/_1FFn94HZDdFoKAnlF31QQxpjxpIqioU-zd_9PWpvP9mhJXzxFeeLGN-J9j94eYpNhG4WjvVX7iOuctTrSvo0AP3IsY0RLhdSiqUtVEqVvp8DQN_-9s9R8S115Vkvpc5Nr87v0f8) 步骤事件 GameMaker Studio 2 将游戏时间分成若干个步骤,游戏速度定义了每秒应该执行的步骤数量。 一个步骤,是一个所有事件在游戏运行时被检查和触发的基础循环运行,所以你可以想到,步骤事件是一个每一步骤都会被检查和触发一遍的事件。 请注意,“步骤事件”类别下有三个子类别可以在实例中“微调”时间,但是一般情况下,您最常使用的是主要步骤事件。
![](https://lh3.googleusercontent.com/SCxjT9-N83vhYIC7wAzi8XW4cAQ2njSOgBzV1IHeK9eVIPxVhQFp70_JDqMZ4Z3GTpsfHh_UEs2yZqE5YPgk8w53D5-zPwA6cLktQdysis03qE0UmunJf6XLVUFEQA-9TMiBcTtO) 碰撞事件 显然,在制作游戏时,知道对象的两个(或多个)实例是否发生碰撞以及触发碰撞事件是非常重要的。 这是一个放置于一个对象,然后指定对其他对象进行碰撞检查的事件。 一旦添加该事件并选择对象来进行碰撞检查就可以添加代码或拖放模块来定义碰撞发生后触发的行为。
![](https://lh4.googleusercontent.com/I2F9ZK3jLDJQRDIHh3hcA8jeAxlSTWbnFkDXPxWBWbpopKdXwOXE4IMz1-T_tfa7Vb9BtIp45UAPK_CbV14G7Xr5dZiX_QG-WHG4zxZZ66zR8EemJLat9GxQrI_pZW_1K4mjrEzd) 绘制事件 绘图事件类别中有多个不同的绘图事件,但最常用的绘图事件是顶部的绘图事件,简称为“绘制”。 这个普通绘图事件和步骤事件一样,每一个游戏帧都会被检测和触发,但是它有两种不同的工作方式。 首先是当你不添加任何代码或拖拽模块时,在这种情况下,它将“默认绘制”被分配的精灵,使用所有已应用在对象上的其他变换(如改变其大小或阿尔法混合)。 第二种方式是当你添加代码或拖拽模块时。 向事件添加一些内容告诉 GameMaker Studio 2 “我想控制你为这个对象的实例绘制的内容”,它会完全覆盖默认的绘制。 这意味着你可以有一个关联了精灵的对象,然后设置绘制事件来绘制文本,但精灵将不会被绘制,因为你还没有告诉 GameMaker Studio 2 绘制它,尽管文本(也没有告诉 GameMaker Studio 2 但却)会被绘制。
![](https://lh5.googleusercontent.com/CT7hJ6qm36ogjpd5eT9jsk8ugrdvSiGIljHqEqy6PgVvj16N1bepPpZs3CXlQQemKPMZuMwa3_bav_Sv-69Zc2I7b-aHmqB3D1VEqa8dTYhMe2LQT4Hl6uHMV9N2RKJ1gtsMzJeM) 毁灭事件 此事件是一个实例被销毁时所执行的最后一个事件。 在向对象添加行为时往往会被忽略,但它可能非常有用 - 例如,在敌人死亡时创建爆炸或粒子效果,或者在房间的另一部分重新产生对象的新实例, 以及用于添加分数。
有关所有类型事件的更多信息,请参阅此处。
添加事件将打开代码编辑器或拖放模块编辑器,具体取决于您创建的项目类型。 在这个窗口中,您可以添加您希望在游戏循环内每次触发事件时执行的代码或操作。 一个具有事件和代码的典型对象如下图所示:
![](https://lh4.googleusercontent.com/-qvaweEmMOPxr8XqjrK9QvwV2ncCIOymf67Hk6f0zACt9lqpep93J5fP2gTaWpnpKsKb1UwED_UGpPPMGrzJuZWxsRK2sAUaPX3HmOW7lvSB_OOKYwoRp6DqNtKQju_kWD5dkPuy)
使用拖放模块或代码编写游戏不属于本基本快速入门指南的范围,但您可以从以下两页中找到更多信息:
* 拖放模块概述
* [GML概览](GML概览.md)
你可以在这里找到对象编辑器所有部分的完整解释:
* [对象编辑器](对象编辑器.md)
本指南的下一部分将着眼于房间编辑器,在这里您学到的所有东西都将汇聚在一起,使您的项目真正成为游戏。
- 介绍
- 新手须知
- 版本授权
- 安装
- 更新
- 发布日志
- 所需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
- 翻译名词对照表