RTS游戲框選移動

本教程將教大家實現(xiàn)RTS游戲中的框選選中人物、右鍵點擊移動的功能。
功能結(jié)構(gòu)
本教程有5個需要實現(xiàn)的功能
框選角色
在框選的角色身上生成選中框
人物移動
鼠標移到屏幕邊緣時移動視野
場景視野縮放
布置場景
首先,我們新建3個圖層
HUD: 放置選中框、框選框
人物:放置可操作角色
背景圖:放置背景圖片

創(chuàng)建士兵對象,為該對象添加自動尋路能力


創(chuàng)建框選框、選中框?九宮格對象,編輯九宮格縮放邊距


創(chuàng)建背景圖片

將對象放入各自圖層中


實現(xiàn)框選
添加全局變量?最后點擊x、最后點擊y,用于后面控制框選框的位置

為士兵對象添加實例變量【是否選中】

新建事件分組【框選】

當左鍵點擊士兵時,士兵狀態(tài)變?yōu)檫x中

左鍵點擊空白位置時,士兵狀態(tài)變?yōu)槲催x中

設置全局變量,當鼠標左鍵按下時,【最后點擊x/最后點擊y】的值為鼠標的坐標

當按住左鍵時,并且當前鼠標的坐標與最后點擊坐標距離超過16像素時,顯示框選框,并設置坐標大小
位置公式:x:min(鼠標操作.x, 最后點擊x)????y:min(鼠標操作.y, 最后點擊y)
尺寸公式:abs(鼠標操作.x - 最后點擊x)????abs(鼠標操作.y - 最后點擊y)


最后,當鼠標松開、或者距離小于16時,隱藏框選框

實現(xiàn)以上事件后,預覽游戲,即可看到效果。 按住鼠標左鍵拖動,框選框就會顯示。

接下來實現(xiàn)框選選中人物的邏輯。 當鼠標左鍵松開時,根據(jù)框選框的位置,將其中的士兵狀態(tài)設置為選中狀態(tài)

以上便是框選事件的全部邏輯,下圖為事件表全圖

生成選中框
下面我們實現(xiàn)選中框的邏輯

首先,當松開鼠標左鍵時,先銷毀之前生成的選中框

在該事件下建立局部變量local_被選中單位數(shù)

根據(jù)被選中的士兵的數(shù)量,設置局部變量

根據(jù)local_被選中單位數(shù),循環(huán)創(chuàng)建選中框

新建事件,每幀設置選中框的坐標和大小
坐標公式:X:士兵.bboxleft-2 ????y:士兵.bboxtop-2
尺寸公式:寬度:士兵.bboxright-士兵.bboxleft+4 ?????高度:士兵.bboxbottom-士兵.bboxtop+4

實現(xiàn)以上邏輯后,當左鍵點擊或框選住士兵后,士兵的位置就會自動生成選中框
右鍵點擊移動
新建事件,當松開鼠標右鍵、鼠標沒有懸停在士兵上并且存在選中士兵時,執(zhí)行動作。

子事件下,新建局部變量:local_平均x,local_平均y

循環(huán)所有被選中士兵,將士兵的坐標加在實例變量上

實例變量除以士兵的數(shù)量,計算平均值。然后根據(jù)平均值,讓士兵開啟自動尋路。
尋路坐標公式:?X:鼠標操作.x+ self.x-local_平均x ????Y:鼠標操作.y+ self.y-local_平均y

新建事件,當士兵尋路成功時,沿路徑移動

以上即是移動的全部事件,當選中士兵后右鍵點擊地圖,士兵就是自動移動過去。事件全圖如下:

滾屏鏡頭移動
鏡頭的移動比較簡單,當鼠標到達屏幕邊緣時,每幀移動鏡頭即可

視野縮放
最后是通過鼠標滾輪實現(xiàn)視野縮放,通過表達式layoutscale可以獲取當前場景的縮放比例(默認是1)。

以上便是實現(xiàn)RTS框選移動的全部事件。

點擊下載全能無需編程的喚境引擎!? ? ? ??
https://www.evkworld.cn/?c=600005&sc=600019&auto=1