您將學習如何在 Blender 中使用 Python 腳本
用腳本調整車輛移動,加速,停車。請記住,汽車只是用作使用 Python 的示例。本教程將教您 Blender 遊戲引擎的 Python 腳本基礎知識,包括通過腳本訪問和更改邏輯信息。即使您對 Python 有所了解,本教程也很容易理解。
1使用腳本
讓我們真正的遊戲腳本。如下所示:
import bgecont = bge.logic.getCurrentController()own = cont.owner
看看這三行。它們幾乎處於每個遊戲腳本的頂部,並且可能是任何攪拌機遊戲腳本的三行最重要的代碼行。
首先,我將解釋第二行,cont= bge.logic.getCurrentController()
get()當前控制器有哪些功能。那麼,在這裡,我們剛剛添加了一行,訪問控制器,並將該信息分配給變量cont。變量名可以任意,但它通常是一個縮寫,例如 cont,我們只使用它,因此我們不必每次都寫bge.logic.ge t控制器。用變量來代替。
2.添加更多邏輯代碼
刪除時鐘傳感器並添加兩個鍵盤傳感器,一個用於上鍵,另一個用於下鍵。將這些傳感器重命名為"向上"和"向下"。名稱很重要,因為我們將在 python 腳本中按名稱調用這些傳感器。對於"up"傳感器,還啟用"Tap"選項,以便此傳感器僅在您按下該鍵時註冊一次,否則,在釋放密鑰時,它也會再次註冊。點擊可確保傳感器僅觸發一次。將這兩個傳感器連接到 python 控制器,以便當按下其中任一按鈕時運行 python 腳本。現在還添加一個運動執行器並將其連接到控制器。將執行器重命名為"移動"。按下向上按鈕時,我們將使用此執行器移動我們的汽車。
import bgecont = bge.logic.getCurrentController()own = cont.ownermove = cont.actuators["move"]pressup = cont.sensors["up"]pressdown = cont.sensors["down"]speed = move.dLoc[1]
將從執行器列表中訪問名為"move"的執行器。如果在括號內未定義任何操作,則連接到 python 控制器的所有執行器將放入此列表中。但在這種情況下,我們只是調用一個名為"move"。
這些訪問傳感器"向上"和"向下",以便我們可以檢測按下哪些鍵,使腳本對每個事件執行一些不同的操作。
現在看看最後一行,speed= move.dLoc[1]。在這裡,我們深入到移動執行器。移動執行器是一個運動執行器。在這種情況下,我們正在訪問dLoc欄位,因為這是我們移動車輛的原因。dLoc欄位實際上是 X、Y 和 Z 值的列表。我們希望在 Y 軸上移動車輛,因此我調用 dLoc 列表的第二個值。如果您想知道為什麼我鍵入 [1] 來調用列表中的第二個值,請記下列表項從 0 開始,因此調用 move.dLoc{1} 是調用該列表中的第二個項。如果我想要第一個值 X 值,我會把它寫為move.dLoc{0}。因此,簡言之,使用這行代碼,我們的可變速度現在將等於運行腳本時的任何 Y 值。
現在,我們已經聲明了所有變量,我們將添加幾個語句,以確定是否按下向上或向下,然後讓兩個鍵觸發不同的東西。簡言之,這就是我們想要發生的事情。每當玩家按下時,運動執行器中的 Y 值都會增加 0.05,每次按鍵都會增加速度。每當玩家按下時,Y 值將重置為 0,使汽車停止。
我們將從定義按下時會發生什麼開始。因此,在速度變量下方添加行,以便腳本如下所示:
import bgecont = bge.logic.getCurrentController()own = cont.ownermove = cont.actuators["move"]pressup = cont.sensors["up"]pressdown = cont.sensors["down"]speed = move.dLoc[1]if pressup.positive: speed = speed + 0.05 move.dLoc = [0.0, speed, 0.0] cont.activate(move)
如果語句用於檢測是否按下了 up 按鈕。if 語句的末尾需要冒號,並且此語句的任何操作部分都需要在它下面選項卡。現在,如果玩家按下,0.05 將添加到當前任何速度值中,並且此速度值將插入移動執行器。dLoc是我們想要更改的運動執行器中的欄位。如果要更改執行器中的其他欄位,要找出可用的選項,可以使用列印dir(移動)。因此,現在我們只需將速度變量插入列表中的 Y 值,它將更改執行器中的值。若要使此執行器立即激活,我們使用線路cont.activate(移動)。現在我們的車開得更快了。
現在,我們將定義按下時會發生什麼。因此,在底部添加行,以便腳本如下所示:
import bgecont = bge.logic.getCurrentController()own = cont.ownermove = cont.actuators["move"]pressup = cont.sensors["up"]pressdown = cont.sensors["down"]speed = move.dLoc[1]if pressup.positive: speed = speed + 0.05 move.dLoc = [0.0, speed, 0.0] cont.activate(move)elif pressdown.positive: speed = 0 cont.deactivate(move) move.dLoc = [0.0, 0.0, 0.0]
因此,如果玩家按下而不是向上,我們將速度值設置為0,停用停止汽車的移動執行器,最後我們將dLoc欄位中的 Y 值重置回 0。
3玩遊戲!
您的腳本已完成!開始遊戲!現在反覆按上以獲得速度,然後按下向下鍵停止。
在本教程中,我們實際上並沒有使用自己的變量。但是,作為一個快速示例,如果您為對象創建了一個名為"health"的屬性,則可以通過這樣調用它來讀取或更改 Python 中的此值。