使用GML的八方向自動尋路

173發表於2020-04-21

使用GML的八方向自動尋路

本教程適合無基礎人員使用.


提示

本教程中僅使用了最簡單的方法,並且有一些錯誤和不規範之處。請諒解一下,在評論區提出,我會修改。古人曰“教學相長”,希望大家和我一起學習,一起進步!

效果展示

八方向自動尋路

八方向自動尋路


原理闡述

  1. 玩家單擊
  2. 創造路徑
  3. 新增尋路到路徑
  4. 沿路徑運動
  5. 繪製精靈和路徑

具體實現

  1. 新增兩個精靈:
    • spr_player
    • spr_block
      其中spr_player的原點需要設為中心。
  2. 新增兩個物體:
    • obj_player
    • obj_block
  3. 進入obj_player的建立事件
lj=path_add();
xl=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
mp_grid_add_instances(xl,obj_block,0)
  1. 進入obj_player的步事件
if(mouse_check_button_pressed(mb_left))
{
    mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);
    path_start(lj,7,0,1)
}
  1. 進入obj_player的繪製事件
draw_sprite(spr_player,0,x,y)
draw_path(lj,x,y,1)
  1. 在房間內隨機放置你想要的障礙物。
  2. 隨手儲存。
  3. 按F5進行測試。

如果只是需要這個功能,到此就可以結束了。


程式碼解釋

lj=path_add();

新增一條路徑。

xl=mp_grid_create(0,0,room_width/32,room_height/32,32,32);

初始化尋路

mp_grid_add_instances(xl,obj_block,0)

將obj_block新增到障礙物

mouse_check_button_pressed(mb_left)

檢查滑鼠左鍵是否按下

mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);

新增一個尋路

path_start(lj,7,0,1)

沿路徑開始運動

draw_sprite(spr_player,0,x,y)
draw_path(lj,x,y,1)

分別是畫精靈和路徑

總結

主要是掌握路徑和尋路函式的簡單使用

註釋

  1. 新增障礙物時,可以使用父物件。
  2. 如果把步驟4:obj_player步事件中的mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,1);改成mp_grid_path(xl,lj,x,y,mouse_x,mouse_y,0);,就變成了四方向自動尋路。
  3. 本文所用原始碼已提供附件下載。可前往http://gamemake.org/post-update-17540.htm下載。

其他

本文首發於Gamemaker開發者之家,未經允許禁止轉載。部落格園是Tesla本人釋出的!

商業合作請聯絡rainbowstesla@gmail.com或rainbows666@foxmail.com。

相關文章