Godot—2D游戏设计笔记
Godot—2D游戲設計筆記(兼MarkDown測試)
文章目錄
- Godot—2D游戲設計筆記(兼MarkDown測試)
- 一、第一次游戲設計時遇到的問題
- 1.關于針對一張圖的學習
- 2.Godot的命名方法
- 二、官網游戲制作
- 1.制作目標:
- (1)設置項目
- (2)創建玩家場景
- (3)編寫玩家代碼
- 1.制作目標:
一、第一次游戲設計時遇到的問題
1.關于針對一張圖的學習
在制作過程,未能找到圖中的確保對象的子項不可選擇,在進行一番大海撈針后,終于在場景 下的模式工具 里找到了這個選項,這里有兩個按鍵:
1.將所選對象鎖定到該位置: 鎖定節點及其子節點同時無法選中且不能移動
2.確保對象的子項不可選擇: 只鎖定該節點的子節點,節點本身可以編輯
以及各種鼠標模式(略)
很實用的工具—吸附模式:
吸附模式: 自動吸附對齊
網格吸附: 開啟后可以看到一些網格,更好的用于對齊
2.Godot的命名方法
一般來說Godot中形成的江湖規矩是這樣的:
節點(類): 大駝峰命名法
變量函數: 蛇形命名法
常量: 全大寫法(ALL_CAPS)
二、官網游戲制作
1.制作目標:
制作一個可以操控的角色,并且可以控制角色躲避NPC敵人,如果碰到NPC敵人就會Game over,再次點擊屏幕重新開始。
(1)設置項目
新建項目
一般在開始制作一款游戲,就一定要對游戲的類型和玩法進行確定,否則中途去修改游戲的玩法是非常困難的,最后前功盡棄。
游戲制作在手機端,所以需要調整游戲窗口大小
我們在點擊項目 -> 項目設置打開項目設置窗口,然后在左欄中打開 Display -> Window(顯示 -> 窗口)選項卡,將“Width”設置為 480,并將“Height”設置為 720。
另外,滾動到該小節的底部,在“Stretch”(拉伸)選項中,將 Mode 設置為“2d”、Aspect 設置為“keep”。這樣就可以保證在不同大小的屏幕上,游戲都能夠進行一致的比例縮放。
(2)創建玩家場景
構建節點
在構建了一個Area2D節點后命名為Player,然后將其子節點鎖定
ctrl+s保存場景。
精靈動畫
在player節點里添加一個AnimatedSprite節點,在屬性面板找到Frames屬性,然后新建SpriteFrames,打開動畫幀面板:
點擊新建動畫按鈕,添加 up 和 walk 動畫,將素材拖入動畫幀。
通過AnimatedSprite節點中的scale設置圖標大小比例為(0.5,0.5)。
在Player節點下新建CollisionShape2D節點,用來確定玩家碰撞面積。
新建CapsuleShape2D橢圓型碰撞體積,調整句柄到適當大小。
(3)編寫玩家代碼
創建新代碼
選擇Player節點點擊
插入如下代碼,創建新變量,用來定義初始速度和窗口大小
extends Area2Dexport var speed = 400 // How fast the player will move (pixels/sec). var screen_size # Size of the game window.export 關鍵字可以使自定義變量在屬性的Script Variables項目中可修改
因為對象目前只有一個,所以目前只需要將所有代碼打在player里即可
用 _ready函數創建獲取窗口大小給screen_size函數
func _ready():screen_size = get_viewport_rect().size然后用鍵位映射分別設置操控鍵updownleftright四個鍵位
給鍵位設置函數:
最后在_porcess函數的最后加入以下代碼:
position += velocity * deltaposition.x = clamp(position.x, 0, screen_size.x)position.y = clamp(position.y, 0, screen_size.y)// 設置position的值_process() 函數的 delta 參數是 幀長度 ——完成上一幀所花費的時間. 使用這個值的話, 可以保證你的移動不會被幀率的變化所影響.
此時可以嘗試運行以下本場景
運行本場景: 單擊F6鍵
運行整個項目: 單擊F5鍵
運行發現你可以在屏幕上任意移動角色運動即可
選擇動畫
在_process的末尾加上:
if velocity.x != 0:$AnimatedSprite.animation = "walk"$AnimatedSprite.flip_v = false// See the note below about boolean assignment.$AnimatedSprite.flip_h = velocity.x < 0 elif velocity.y != 0:$AnimatedSprite.animation = "up"$AnimatedSprite.flip_v = velocity.y > 0flip_h和flip_v使用來將動畫分別進行水平和豎直翻轉的操作。
此時再次按F6運行本場景,發現程序正常運行即可
然后在_ready函數中加入:
hide()//在游戲開始時隱藏玩家準備碰撞
代碼中在extends Area2d的下面加上
signal hit來通過Godot信號來檢測敵人。
然后找到player節點里屬性的右邊 “節點” 里的hit信號
由于敵人將是 RigidBody2D 節點,所以需要 body_entered(body: Node)信號,雙擊hit信號建立信號連接,直接帶點擊 ==“連接”==即可
然后在新建的信號
下面輸入:
為了確保不會多次出發hit信號,于是用hide()將body部分隱藏,利用set_deferred來安全的禁用
最后再為玩家添加一個函數,用于在開始新游戲時調用來重置玩家。
func start(pos):position = posshow()$CollisionShape2D.disabled = false本章就到此為止了剩下的部分以后再完善
總結
以上是生活随笔為你收集整理的Godot—2D游戏设计笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 球星测试软件,2KOL球星测评丨篮球之神
- 下一篇: python共轭梯度法_Numerica