## 繪制事件
**繪制事件**管理游戲運行時你在屏幕上看到的內容,它分為多種獨立事件來滿足你游戲繪圖的不同需求。 下圖說明了每個事件的執行順序:
:-: 
普通**繪制**事件有 3 種子事件類型:**繪制開始**、標準**繪制**和**繪制結束**事件。通常,你只需要使用基礎**繪制**事件,需要注意的是,所有房間中的實例,在游戲中每步都會觸發這個事件。所以,*只要勾選這個實例**可見**復選框,這個事件就會一直被調用。*即使你沒有在物體屬性中為這個事件定義任何內容(例如:無代碼,無動作),只要這個物體被指定了精靈,它就*依然*會觸發繪制事件。這是因為*GameMaker Studio 2*在處理繪制事件時有兩種繪制方式:
* **默認繪制**,當你在一個物體中定義了精靈,但沒有在**繪制**事件中放置任何動作或代碼時,*GameMaker Studio 2*會繪制此精靈。請注意,只要繪制事件為空,你在其他事件中執行的例如更改圖像比例,索引,混合等的任何變換都將被反映出來。
* **自定義繪制**,這是在繪制事件中放置代碼或操作的時候。這告訴*GameMaker Studio 2*“我想自定義你為這個物體實例所繪制的內容”,并且這完全不同于默認繪制。 這意味著,例如,你可以擁有一個分配了精靈的物體,然后將繪制事件設置為繪制文本,但它不會繪制精靈,因為你沒有告訴*GameMaker Studio 2*將其與文本一起繪制。
其余的繪制事件將在下面列出的部分中進行說明:
### 開始繪制與結束繪制
除了主要的**繪制**子事件外,你還有一個**開始繪制**和**繪制結束**子事件。這些動作與標準**繪制**子事件完全相同(即:它們將繪制游戲的每一步和所有視圖中的任何內容),但如果沒有添加到物體,它們不會 “默認繪制” 任何內容,它們將始終在標準**繪制**子事件之前 / 之后運行。因此,你將擁有所有實例的**開始繪制(Draw Begin)**步驟,然后是所有實例的**繪制(Draw)**,最后是所有實例的**繪制結束(Draw End)**步驟。
通過這種方式,你可以在一個實例的開始繪制步驟中繪制內容或設置繪圖屬性,并確保具有標準繪制事件或繪制結束事件的所有實例都將使用這些屬性或繪制第一個實例繪制的內容。本質上來說它能確保你能在特定時間繪制特定東西,就像步開始(Begin Step)和步結束(End Step)事件一樣。
在*GameMaker Studio 2*中繪制內容時,有幾件事需要注意,無論是繪圖的精靈還是著色器,還是 3D:
* 繪制事件是一個非常密集的事件,因為它是占用大部分時間和資源的事件之一......為此,除了繪圖之外,在繪制事件中做任何事情都不是一個好主意。因此,在步事件或計時器或任何其他適合的事件保存大型代碼或復雜操作,保留繪制事件用于繪圖是很清晰的,因為它是最適合的。
* 如果你的物體將可見(visible)參數設置為否(off,以便不繪制物體的實例),則會跳過所有繪制事件(**窗口大小調整**事件除外)。這意味著使實例不可見將*阻止放置在這些事件中的代碼運行*,因此如果它們不可見,則不要將基本代碼放在繪制事件中。
* 你繪制的內容與你選擇的碰撞引擎(傳統或物理)無關,因為它是由物體屬性和給定物體的精靈(或遮罩)定義的。
### 繪制 GUI
**繪制 GUI(Draw GUI)**子事件類型屬于**繪制事件**類別,專門用于繪制不受視圖比例或旋轉影響的 GUI(圖形用戶界面)元素。這意味著你可以讓實例繪制 HUD 的所有元素,而不必將元素的所有定位基于房間內的實例位置或當前視圖的位置。
在這些事件中繪圖時,重要的是要了解即使視圖處于活動狀態時繪制坐標也不會改變,并且 (0,0)*始終*是應用程序表面或所展示的東西(例如一個精靈)的左上角(請參閱本節的底部),應用程序表面的默認寬度和高度是 1:1。深度排序仍然保持在不同層上的不同實例之間(因此較低層上的實例將在較高層之后繪制)并且也在事件本身內,因為**開始繪制 GUI(Draw GUI Begin)**子事件將首先為所有實例繪制,然后標準的**繪制 GUI(Draw GUI)**將為其繪制所有實例,最后觸發**繪制 GUI 結束(Draw Gui End)**子事件。
通過這種方式,你可以在一個實例中在**開始繪制 GUI**中繪制內容或設置繪圖屬性,并確保具有標準**繪制 GUI**或**繪制 GUI 結束**子事件的所有實例都將使用這些屬性或繪制第一個實例具有的內容畫。基本上它是確保在特定時間繪制某些東西的確定方法,就像**步開始**和**步結束**子事件一樣。
這些事件也可以與普通的**繪制**子事件一起使用(它將受到視圖位置、比例和正常旋轉的影響)。如果你沒有**繪制事件**,但你確實有**繪制 GUI 事件**,那么*GameMaker Studio 2*仍會默認為實例繪制精靈(如果它有一個)。
與其他繪制子事件相關,**繪制 GUI**事件將始終繪制在正常繪制事件中繪制的任何內容。因此,如果你在較低層上有一個帶有**繪制 GUI**事件的實例,它將使用常規繪制事件繪制更高層上的實例。如果兩個實例都具有**繪制 GUI**子事件,則將遵循圖層順序。
> **注意**:默認情況下,此事件將使用應用程序表面大小繪制 1:1,通常是房間大小或視口。這意味著當你在[游戲選項](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/2_interface/3_settings/game_options/index.html)中進行**寬高比校正**時,GUI 不會被繪制在游戲 “寬銀幕” 的黑框上。可以使用[display\_set\_gui\_maximise](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/3_scripting/4_gml_reference/cameras%20and%20display/display/display_set_gui_maximise.html)函數關閉此行為,還可以將 GUI 事件鎖定為特定大小,然后使用函數[display\_set\_gui\_size](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/3_scripting/4_gml_reference/cameras%20and%20display/display/display_set_gui_size.html)自動縮放以適應顯示或應用程序表面尺寸。
### 繪制預處理與繪制后處理
**繪制預處理(Pre Draw)**和**繪制后處理(Post Draw)**子事件是**繪制事件**類別的一部分。但是,與其他繪制事件不同,它們直接繪制到屏幕緩沖區,這將是當前可見的所有視圖的組合屏幕空間的大小,或者是你當前唯一使用的窗口的大小。 下圖說明了這一點:因此,如果你正在使用繪制**預**或**后**處理事件,則你將繪制到全屏渲染目標,該目標的大小與所有視圖所適合的窗口大小相同。 如果你沒有活動的視圖,則將其設置為窗口本身的大小。
**繪制預處理**子事件在任何其他繪制事件之前觸發,在其中你可以設置值,設置繪制屬性甚至繪制內容而無需擔心 GUI 層的視圖或大小(GUI 層的大小可能與屏幕緩沖區相同,但可能不一樣,因為你可以在代碼中設置 GUI 分辨率)。
值得注意的是,此事件發生在清除屏幕緩沖區之前,這意味著如果你未在房間編輯器中關閉視圖清除,則將看到**繪制預處理**事件中繪制的任何內容,然后第一個視圖將清除它。如果你希望能夠自己查看視圖,或者根本沒有使用視圖,那么你還應該在[房間編輯器](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/2_interface/1_editors/rooms.html)中將背景顏色設置為透明度為 0。
> **注意:**如果你關閉這些選項,你可能會注意到在測試游戲時屏幕上繪制了不需要的假象(例如來自實例的 “蹤跡”)。這是因為你直接繪制了繪制緩沖區的前一幀而不清除它。但是你可以使用[draw\_clear\_alpha](https://gamemakerchina.github.io/GMS2_manual_en2ch/source/_build/3_scripting/4_gml_reference/drawing/colour/draw_clear_alpha.html)自己完成此操作。
**繪制后處理**子事件在標準繪制事件之后但在繪制 GUI 事件之前觸發。與繪制預處理事件一樣,它基于屏幕緩沖區大小的大小,并且放置在繪制 GUI 事件之前,使你能夠簡單輕松地在全屏的基礎上執行后處理效果和其他事物,而不會干擾任何事件。你可能在游戲中擁有的 HUD / GUI 元素。
### 窗口大小調整
此事件類型屬于**繪制事件**類別,雖然它實際上并未繪制任何內容,但它確實對繪制畫布中的更改做出了反應 - 具體來說,它是為在游戲窗口 “snapped(突然變化)” 時響應 UWP 畫布大小的變化而設計的。
在 UWP 目標平臺上,重要的是從游戲窗口的 “snapping” 中捕獲游戲畫布的大小(例如,當用戶將窗口拖動到顯示器的側面時)。 此事件將執行此操作并在每次更改畫布時觸發,允許你在此處添加自定義代碼,以調整視圖大小或根據需要重新定位 HUD 元素。提供此函數是一種方便的方法,可以避免使用步事件代碼來檢查這些事情。
> **注意**: 你無法在這個事件中繪制!它是通過調整畫布大小來觸發的,僅用于捕捉這個變化......任何應該完成的繪圖仍然必須在其他一個繪制事件中。
- 介紹
- 新手須知
- 版本授權
- 安裝
- 更新
- 發布日志
- 所需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
- 翻譯名詞對照表