GMS2,当摧毁一个孩子时,所有的孩子都会受到影响.父对象没有按预期工作



我的父对象及其子对象有问题。我的意图是有一个独立于其他子刷的敌人刷(子刷)。刷出者将刷出敌人,直到达到所需的数量,然后被摧毁(孩子被摧毁)。然而,当我摧毁一个由父刷出对象生成的敌人时,所有子刷出对象都会生成一个敌人。的例子。我有两个子刷出器,可以刷出一个敌人。当我摧毁子结点A时,子结点A和子结点B都会生成一个敌人。此外,当我从刷出器中摧毁所需数量的敌人时,A和B子刷出器都会被摧毁,除了A子刷出器。

下面是代码

///PARENT SPAWNER OBJECT

PARENT STEP EVENT
if(enemy_dead_count <= 0){
sprite_index = sDestroyed_Ghost_Spawner;
if (sprite_index == sDestroyed_Ghost_Spawner){
if(image_index >= 9 && image_index < 10){
image_index = 9;
}
}
} else {
while(spawn_ghost == 0){
instance_create_layer(x,y+32,"Player",oEnemy_spawner_animation);
spawn_ghost += 1;
}
}
//PARENT CREATE EVENT
spawn_ghost = 0;
enemy_dead_count = 3;

对象oEnemy_spawner_animation是一个缩放xscale和yscale的对象,当达到所需的大小时,将实例更改为oEnemy_ghost

//下面的动画代码

//animator create event
image_xscale = 0;
image_yscale = 0;

//animator step event
if image_xscale <= 1 {
image_xscale += 0.008;
image_yscale = image_xscale;
} else{
image_xscale = 1;
//update yscale
image_yscale = image_xscale;
instance_change(oEnemy_ghost,true);
}

在Enemy Parent中,我不会发布所有的代码,因为它非常广泛,但我会发布相关的

if(hp<=0){
instance_destroy();

with(x,y,oEnemy_ghost_spawner){

spawn_ghost = 0;
enemy_dead_count -= 1;
}

}

在上面,当一个敌人被摧毁时,我使用with语句来生成一个新的敌人。我在这里针对的是孩子而不是家长,也许这就是问题所在?我有一种感觉,我需要以某种方式将敌人的产卵ID与子产卵ID联系起来,但我不知道如何实现这一点。

关于如何实现我预期的功能有什么想法吗?我如何让我的子刷出器相互独立运行?

使用with()函数,您将遍历该类型的每个对象。我想如果这包括父母,它也会影响到孩子。

一个可能的解决方案是:

  • 创建当前"父"函数的另一个子函数,并使用当前父函数作为敌人刷出器的基础,它将影响所有敌人刷出器,而不是自身的实体。
  • 设置一个布尔值,只对父节点(如isParent)设置为true,对子节点设置为false。
  • 如果你想让每个刷出器彼此唯一,那么你可以尝试给他们一个唯一的ID,并在with()函数内,搜索那个唯一的ID,如果它是你正在寻找的人。

相关内容

  • 没有找到相关文章

最新更新