我们有如下自定义类:
class Enemy: public CharacterBody2D {
GDCLASS(Enemy, CharacterBody2D);
public:
Enemy();
~Enemy();
static void _bind_methods();
void set_name(String name);
[[nodiscard]] String get_name() const;
void set_hp(int hp);
[[nodiscard]] int get_hp() const;
private:
String name;
int hp;
};
随后我们将其添加进Array中
Array array;
Enemy *enemy = memnew(Enemy);
array.push_back(enemy);
但当我们将其拿出来的时候,意外发生了
Enemy *enemy2 = array[0];
编译时爆出了这个错误
error C2440: “初始化”: 无法从“godot::Variant”转换为“Enemy *”
原来它的类型已经在我们不知不觉间被隐式转换为了Variant
这时候我们把它在转回来
Enemy *enemy2 = Object::cast_to<Enemy>(array[0]);
//也可直接这样写
//Enemy *enemy2 = Object::cast_to<Enemy>(array[0].operator godot::Object *());
enemy2->set_hp(100);
UtilityFunctions::print("enemy2.get_hp() = ", enemy2->get_hp());
经过这么一番折腾,我们将其转回了Enemy*,可以看到也成功的调用了其方法