# 【小知识大杂烩01】
# 使用@export和@export_category
@export 可以使属性公开到编辑器属性栏,方便外部进行修改。
@export_category 可以对属性进行分组。
@export_category("移动信息")
# 最大速度
@export var max_speed := 3000
# 加速度
@export var acceleration_speed := 400
@export_category("玩家信息")
@export var player_name := "小狐狸"
@export var player_age := 18
func _ready():
var log_str := "玩家名字:%s 今年%d岁 移动速度%d 加速度 %d" % [player_name,player_age,max_speed,acceleration_speed]
print(log_str)
func _process(delta:float):
pass
# 使用组
可以方便的把节点进行分组,分组后,可以通过代码进行遍历调用组里的对象。
# 设置组
先选中要进行分组的节点,然后在分组信息区域里,输入分组名字,如“enemy”这样就可以对节点进行分组了。
分组之后,就可以在场景列表上的节点上标记上分组Icon,鼠标指上去还可以看到属于哪个分组。
# 遍历组
如下图所示,可以对分组的对象进行遍历访问以及遍历执行函数。
还有更高级的调用函数方式,例如 call_group_flags :
# 使用断言Assert
在调试时候可能会用到。保证某个条件必须为true时,可以加上断言函数。
assert(条件,为false时提示信息) 方法,在传入的参数里,如果值为false,则会暂停并进入调试模式。
比如在方法内部,无法控制输入是否合法时,可以断言输入是合法的。当输入不合法时,会进入调试。
注意断言功能只在Debug版本生效,下面代码的 "if OS.is_debug_build():" 可有可无。
# 打开浏览器或者指定文件夹
# 使用单例
创建一个 Singleton 目录,用于存放单例的脚本。
例如创建一个GlobalData.gd的单例文件:
extends Node
var vpweburl := "https://vp666.cn"
在菜单里的 项目 -> 项目设置 -> 自动加载 标签页里加上GlobalData.gd文件。
然后就可以在其他对象脚本上访问GlobalData的函数与属性了。
# 整体游戏加速与减速
time_scale 大于1 加速,小于1 减速。
func _ready():
Engine.time_scale = 2
# 使用曲线
创建 Curves 文件夹
创建 curve01.tres 文件
进行编辑曲线:
进行使用曲线:
extends Node2D
const MY_CURVE = preload("res://Curves/curve01.tres")
func _ready():
var val = MY_CURVE.sample(0.25)
print(val)
#输出0.15625
# 读取项目设置属性
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
# 切换关卡
func _on_area_2d_body_entered(body):
get_tree().change_scene_to_file("res://level_1.tscn")
# 获取鼠标全局坐标位置
func _input(event):
if event is InputEventMouseMotion:
var mouse_pos = get_global_mouse_position()
node_2d.look_at(mouse_pos)
# 按钮点击事件
func _input(event):
if Input.is_action_just_pressed("shoot"):
print("click the shoot button")
# 属性分类
@export_category("基本信息")
@export var name: String
@export_range(0,100,1) var age: int
@export_category("其他信息")
@export var head_icon: Texture2D
# 运行时保存Resource
ResourceSaver.save(res,res.resource_path)
# 运行时创建实例
func create_instance():
var instance_class = preload("res://xxxxx.tscn")
var new_instance = instance_class.instantiate()
add_child(new_instance)
# 自定义类for in
可以让指定的类成为可for in 获取内部对象。
extends CharacterBody2D
var length := 10
var _index := 0
func _iter_init(_arg) -> bool:
return _iter_is_running()
func _iter_next(_arg) -> bool:
_index += 1
return _iter_is_running()
func _iter_get(_arg) -> int:
return _index
func _iter_is_running() -> bool:
return _index < length
使用 for in 输出 0~9。
@onready var hero = %Hero
func _ready():
for i in hero:
print("i is ",i)
← 【基础知识】 【GDScript基础】 →