【Godot_4.2.2】静态变量和普通变量的区别

关键词:Godot,4.2.2,静态变量,普通变量

前言:本内容由ChatGPT回答后,经楼主整理所得,仅用于笔记。可随意转载,无需授权



静态变量和普通变量在某些方面可能看起来相似,但它们的主要区别在于作用域和生命周期。为了更清晰地理解这两个概念,我们可以通过以下几个要点来总结它们的差异:

------------------------------------------------------------------------------->【主要区别】<-------------------------------------------------------------------------------

1.归属:
   ·普通变量:属于类的实例,每个实例都有独立的副本。

   ·静态变量:属于类本身,所有实例共享同一个值。


2.访问方式:

   ·普通变量:需要通过实例来访问(例如 self.instance_variable)。

   ·静态变量:可以直接通过类名访问(例如 ClassName.static_variable),也可以通过任意实例访问(例如 self.static_variable)。


3.状态共享:(最大区别的关键点)

   ·普通变量:每个实例各有各的状态,修改一个实例的普通变量不会影响其他实例。

   ·静态变量:所有实例共享同一个状态,修改静态变量会影响所有实例。


4.生命周期:

   ·普通变量:与实例的生命周期相关,当实例被销毁时,这些变量也随之消失。

   ·静态变量:在程序运行期间存在,直到程序结束,不与任何特定实例有关。


5.示例对比

   ·普通变量示例
   如果你创建了多个这个类的实例,它们的 instance_variable 值是独立的。

extends Node

var instance_variable = 0  # 每个实例都有自己的副本

func _ready():
    instance_variable += 1
    print(instance_variable)  # 输出当前实例的计数

   ·静态变量示例
   如果你创建了多个这个类的实例,所有实例将共享同一个 static_variable 值,增加其中一个实例的值会影响到所有其他实例。

extends Node

static var static_variable = 0  # 所有实例共享同一个变量

func _ready():
    static_variable += 1
    print(static_variable)  # 输出所有实例共同的计数

---------------------------------------------------------------------------------->【总结】<----------------------------------------------------------------------------------

1.虽然静态变量和普通变量在语法上都很类似,但它们在作用域和用途上的不同,使得两者在设计模式和程序结构中发挥着不同的作用。

2.选择使用哪一种取决于你的需求,比如是否需要状态共享等。

3.如果你仍然觉得它们之间没有显著差别,可能是因为你还没有遇到需要使用它们的具体场景。在实际项目中,根据设计需求合理使用这两种变量,可以有效提高代码的可维护性和逻辑性。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
godot中的`class_name`关键字用于为类注册一个新的类型,并在编辑器中显示自定义图标。使用`class_name`关键字时,可以指定可选的图标路径,以使其在编辑器中显示。 以下是一个示例: ```gd # Item.gd extends Node class_name Item, "res://interface/icons/item.png" ``` 这个示例中,`Item.gd`文件中的类被注册为一个新的类型,并且使用`"res://interface/icons/item.png"`作为它在编辑器中的图标。 另外,godot中的类文件可以包含内部类。内部类使用`class`关键字来定义,并可以使用`ClassName.new()`函数来实例化。 以下是一个示例: ```gd # Inside a class file. # An inner class in this class file. class SomeInnerClass: var a = 5 func print_value_of_a(): print(a) # This is the constructor of the class file's main class. func _init(): var c = SomeInnerClass.new() c.print_value_of_a() ``` 在这个示例中,主类文件中包含了一个内部类`SomeInnerClass`,可以通过`SomeInnerClass.new()`来实例化并调用它的方法。 此外,以文件形式存储的类在godot中被视为资源。要在其他类中访问这些类资源,必须从磁盘加载它们。可以使用`load`函数或`preload`函数来加载类资源。 以下是一个示例: ```gd # Load the class resource when calling load(). var my_class = load("myclass.gd") # Preload the class only once at compile time. const MyClass = preload("myclass.gd") func _init(): var a = MyClass.new() a.some_function() ``` 在这个示例中,使用`load`函数来加载一个类资源,并使用`preload`函数在编译时预加载一个类资源。然后可以通过调用类对象上的`new`函数来实例化该类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值