个人技术总结——GDScript的使用

222200222胡彭 2024-12-13 16:23:07
这个作业属于哪个课程https://bbs.csdn.net/forums/2401_CS_SE_FZU
这个作业要求在哪里https://bbs.csdn.net/topics/619470310
这个作业的目标总结过去
其他参考文献《构建之法》、CSDN

目录

目录

  • 1.技术概述
  • 2.技术详述
  • 2.1 语言特性
  • 语法
  • 数据类型
  • 函数
  • 类和对象
  • 信号
  • 继承
  • 错误处理
  • 静态类型和类型提示
  • 内置函数
  • 性能
  • 集成
  • 总结
  • 2.2实际应用
  • 添加Player结点脚本实现人物移动控制以及攻击等等
  • 添加地图Area2D脚本实现区域触发事件,实现场景转换
  • 3.遇到的问题
  • 3.1 动画帧数错误
  • 3.2 角色进入区域场景切换
  • 4.总结

1.技术概述

GDScript:
GDScript是Godot的默认脚本语言,专为游戏开发设计,语法类似于Python,易于学习和使用
它是动态类型的,提供了简洁的语法和快速的编译与加载速度
GDScript与Godot编辑器紧密集成,支持节点、信号和场景的代码补全
内置了向量和变换类型,适合进行线性代数计算,这对于游戏开发非常关键
支持多线程,并且没有垃圾回收机制,内存管理通过引用计数自动进行,但也可以在需要时手动控制
是渐进类型的,变量默认是动态类型,但可以使用类型提示进行强类型检查

2.技术详述

2.1 语言特性

GDScript 是 Godot 引擎的默认脚本语言,它受到了 Python 的影响,因此具有简洁和易读的特性。以下是 GDScript 的详细介绍,包括其语法、函数、特性等。

语法

GDScript 的语法类似于 Python,这意味着它使用缩进来定义代码块,而不是像 C 语言那样的大括号。

# 这是一条注释

# 变量声明
var my_variable = 10

# 条件语句
if my_variable > 5:
    print("my_variable is greater than 5")

# 循环
for i in range(5):
    print(i)

数据类型

GDScript 支持多种数据类型,包括:

  • 整型(int
  • 浮点型(float
  • 字符串(String
  • 布尔型(bool
  • 向量类型(Vector2, Vector3
  • 变换类型(Transform, Transform2D
  • 颜色(Color
  • 信号(signal
  • 资源路径(ResourcePath

函数

在 GDScript 中,函数使用 func 关键字定义:

func my_function(param1, param2):
    print("Hello, ", param1, " and ", param2)
    return param1 + param2

类和对象

GDScript 使用 class 关键字定义类,并且每个类都应该继承自 Node 或其子类:

extends Node

func _ready():
    print("Node is ready!")

信号

GDScript 支持信号,这是一种 Godot 特有的通信方式,用于在不同节点之间传递消息:

signal my_signal

func _ready():
    emit_signal("my_signal")

继承

GDScript 支持单继承,这意味着一个类只能继承自一个父类:

extends Node

func _ready():
    print("I am a Node!")

错误处理

GDScript 使用 try-except 语句进行错误处理:

try:
    var result = potentially_dangerous_operation()
except SomeError as e:
    print("An error occurred: ", e)

静态类型和类型提示

从 Godot 3.1 开始,GDScript 支持静态类型和类型提示,这有助于提高性能和减少运行时错误:

var my_int: int = 5
var my_string: String = "Hello"

内置函数

GDScript 提供了许多内置函数,例如 print()preload()assert() 等。

性能

由于 GDScript 是动态类型的,它在性能上可能不如静态类型的语言如 C#。但是,对于大多数游戏开发任务来说,这种性能差异是可以接受的。

集成

GDScript 与 Godot 编辑器紧密集成,提供了代码补全、调试、错误检查等功能。

总结

GDScript 是一种为 Godot 引擎量身定制的脚本语言,它的设计目标是简单、易学且高效。它提供了游戏开发所需的所有基本功能,并且与 Godot 的节点系统和信号系统无缝集成。虽然它可能不适合需要高性能计算的大型项目,但对于大多数游戏开发任务来说,GDScript 是一个非常好的选择。

2.2实际应用

添加Player结点脚本实现人物移动控制以及攻击等等

img

img

添加地图Area2D脚本实现区域触发事件,实现场景转换

img

3.遇到的问题

3.1 动画帧数错误

extends Node2D
onready var animated_sprite = $AnimatedSprite
onready var timer = $Timer

var current_frame = 0

func _ready():
    timer.start()  # 启动计时器

func _on_Timer_timeout():
    current_frame += 1
    if current_frame > 2:  # 总共有 3 帧(索引从 0 到 2)
        current_frame = 0
    animated_sprite.frame = current_frame  # 切换到当前帧

报错:Unindent doesn't match the previous indentation level.表示没有链接到正确的组件
解决:在 Inspector 中,将 AnimatedSprite 的 Animation 属性设置为你创建的动画名称(例如 "animation")。

3.2 角色进入区域场景切换

extends Area2D

var body_in = false  # 用于跟踪玩家是否在区域内

# 当角色进入 Area2D 时触发
func _on_area_2d_body_entered(body: Node2D) -> void:
    if body.name == "Player":
        body_in = true  # 玩家进入区域时设置为 true

# 当角色离开 Area2D 时触发
func _on_area_2d_body_exited(body: Node2D) -> void:
    if body.name == "Player":
        body_in = false  # 玩家离开区域时重置为 false

# 每帧调用,用于检查输入
func _process(delta: float) -> void:
    if body_in and Input.is_action_just_pressed("ui_accept"):  # 检查是否在区域内并按下 E 键
        DialogueManager.show_dialogue_balloon(load('res://对话/111.dialogue'), "start")

报错导致角色进入区域不会场景转换
解决:在 Inspector 中,将 DialogueManager 的 Dialogue 属性设置为你创建的对话脚本的名称(例如 "dialogue_script")。在 Editor Settings 中确认设置:
打开 Project -> Project Settings。
选择 Editor -> Editor Settings。
找到 Text Editor -> Indentation,确保 Use Tabs 被禁用,并设置 Tab Size 为 4。

4.总结

GDScript 是一门高效、简单的脚本语言,特别适合快速开发 2D 和 3D 游戏。学习 GDScript 的关键在于理解 Godot 的场景树结构、熟练使用信号机制,以及多实践小型游戏项目。

参考

  1. GDScript 官方文档
  2. https://blog.csdn.net/zhaoyang314/category_12561055.html
...全文
2023 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

113

社区成员

发帖
与我相关
我的任务
社区描述
202401_CS_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_TeacherL
  • 助教_林日臻
  • 防震水泥
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧