Appearance
【小知识大杂烩01】
使用@export和@export_category
@export 可以使属性公开到编辑器属性栏,方便外部进行修改。
@export_category 可以对属性进行分组。
gdscript
@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的单例文件:
gdscript
extends Node
var vpweburl := "https://vp666.cn"
在菜单里的 项目 -> 项目设置 -> 自动加载 标签页里加上GlobalData.gd文件。
然后就可以在其他对象脚本上访问GlobalData的函数与属性了。
整体游戏加速与减速
time_scale 大于1 加速,小于1 减速。
gdscript
func _ready():
Engine.time_scale = 2
使用曲线
创建 Curves 文件夹
创建 curve01.tres 文件
进行编辑曲线:
进行使用曲线:
gdscript
extends Node2D
const MY_CURVE = preload("res://Curves/curve01.tres")
func _ready():
var val = MY_CURVE.sample(0.25)
print(val)
#输出0.15625
读取项目设置属性
gdscript
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
切换关卡
gdscript
func _on_area_2d_body_entered(body):
get_tree().change_scene_to_file("res://level_1.tscn")
获取鼠标全局坐标位置
gdscript
func _input(event):
if event is InputEventMouseMotion:
var mouse_pos = get_global_mouse_position()
node_2d.look_at(mouse_pos)
按钮点击事件
gdscript
func _input(event):
if Input.is_action_just_pressed("shoot"):
print("click the shoot button")
属性分类
gdscript
@export_category("基本信息")
@export var name: String
@export_range(0,100,1) var age: int
@export_category("其他信息")
@export var head_icon: Texture2D
运行时保存Resource
gdscript
ResourceSaver.save(res,res.resource_path)
运行时创建实例
gdscript
func create_instance():
var instance_class = preload("res://xxxxx.tscn")
var new_instance = instance_class.instantiate()
add_child(new_instance)
自定义类for in
可以让指定的类成为可for in 获取内部对象。
gdscript
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。
gdscript
@onready var hero = %Hero
func _ready():
for i in hero:
print("i is ",i)