实例化场景后的 _init()

_init() after instancing a scene

我有两个场景。一个作为class的混乱场景和一个引发所有混乱的s场景

Disorder.gd

extends Node2D

var disorder_name
var disorder_cause
#-----------------Vitals------------------------
var pulse
var O2
var respirations
var systolic
var diastolic
var temperature
var blood_sugar

func _init(disorder_name, cause, pulse = 0, O2 = 0, respirations = 0, systolic = 0, diastolic = 0, temperature = 0, blood_sugar = 0):
    disorder_name = disorder_name
    disorder_cause = cause
    pulse = pulse
    O2 = O2
    respirations = respirations
    systolic = systolic
    diastolic = diastolic
    temperature = temperature
    blood_sugar = blood_sugar

Disorders.gd

extends Node2D

var disorder = preload("res://Scenes/Disorder.tscn")

func _ready():
    var influenza = disorder.instance()
    influenza._init(temperature = 5)

我明白了

error(7, 30): Unexpected assign.

我不确定如何 _init() Disorders 中的 Disorder class 才能根据 Disorder 实例仅分配受影响的参数. temperature = 5 会使人的正常体温增加 5 度

GDScript 不支持命名参数.

这意味着你不能跳过它们。

如果你真的想去做,你可以使用字典:

func _init(disorder_name, cause, params := {}):
    self.disorder_name = disorder_name
    self.disorder_cause = cause
    pulse = params.get("pulse", 0)
    O2 = params.get("O2", 0)
    respirations = params.get("respirations", 0)
    systolic = params.get("systolic", 0)
    diastolic = params.get("diastolic", 0)
    temperature = params.get("temperature", 0)
    blood_sugar = params.get("blood_sugar", 0)

你会这样使用:

var influenza = disorder.instance()
influenza._init("influenza", cause, {temperature = 5})

我不知道你会穿什么 cause,但请注意它不是可选的。


但是,鉴于您的默认值为零,在 _init 之后设置它们会简单得多。所以 _init 可以是:

func _init(disorder_name, cause):
    self.disorder_name = disorder_name
    self.disorder_cause = cause

然后:

var influenza = disorder.instance()
influenza._init("influenza", cause)
influenza.temperature = 5

当然,您可以在声明中设置默认值,例如:

var pulse = 0

类似地,我想指出 GDScript 支持类型。使用它们。

这是一个变体:

var pulse

这是一个变体,值为 0 (int):

var pulse = 0

这是一个变体,值为 0(浮点数):

var pulse = 0.0

这是一个浮点数,值为 0:

var pulse:float = 0

这是一个整数值 0:

var pulse:int = 0

这是一个浮点数,值为 0(默认值):

var pulse:float

这是一个整数值0(默认值):

var pulse:int

这是一个值为 0 的整数(使用类型推断):

var pulse := 0

这是一个值为 0 的浮点数(使用类型推断):

var pulse := 0.0