日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Godot—2D游戏设计笔记

發布時間:2023/12/20 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Godot—2D游戏设计笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Godot—2D游戲設計筆記(兼MarkDown測試)

文章目錄

  • Godot—2D游戲設計筆記(兼MarkDown測試)
      • 一、第一次游戲設計時遇到的問題
        • 1.關于針對一張圖的學習
        • 2.Godot的命名方法
      • 二、官網游戲制作
        • 1.制作目標:
            • (1)設置項目
            • (2)創建玩家場景
          • (3)編寫玩家代碼

一、第一次游戲設計時遇到的問題




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四個鍵位
給鍵位設置函數:

func _process(delta):var velocity = Vector2.ZERO # The player's movement vector.if Input.is_action_pressed("move_right"):velocity.x += 1if Input.is_action_pressed("move_left"):velocity.x -= 1if Input.is_action_pressed("move_down"):velocity.y += 1if Input.is_action_pressed("move_up"):velocity.y -= 1//Input.is_action_pressed()函數可以調用鍵位映射中的鍵位,對相應變量進行修改if velocity.length() > 0:velocity = velocity.normalized() * speed$AnimatedSprite.play()else:$AnimatedSprite.stop()//get_node()的縮寫代碼是$,所以$AnimatedSprited.play是get_node("AnimatedSprited").play的縮寫

最后在_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 > 0

flip_h和flip_v使用來將動畫分別進行水平和豎直翻轉的操作。

此時再次按F6運行本場景,發現程序正常運行即可

然后在_ready函數中加入:

hide()//在游戲開始時隱藏玩家

準備碰撞

代碼中在extends Area2d的下面加上

signal hit

來通過Godot信號來檢測敵人。

然后找到player節點里屬性的右邊 “節點” 里的hit信號

由于敵人將是 RigidBody2D 節點,所以需要 body_entered(body: Node)信號,雙擊hit信號建立信號連接,直接帶點擊 ==“連接”==即可


然后在新建的信號

下面輸入:

func _on_Player_body_entered(body):hide() # Player disappears after being hit.emit_signal("hit")# Must be deferred as we can't change physics properties on a physics callback.$CollisionShape2D.set_deferred("disabled", true)

為了確保不會多次出發hit信號,于是用hide()將body部分隱藏,利用set_deferred來安全的禁用

最后再為玩家添加一個函數,用于在開始新游戲時調用來重置玩家。

func start(pos):position = posshow()$CollisionShape2D.disabled = false

本章就到此為止了剩下的部分以后再完善

總結

以上是生活随笔為你收集整理的Godot—2D游戏设计笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。