0

所以基本上在一个步骤命令行中我有这个代码

if BugType = 1 {
if instance_exists(Obj_Food_Small){
move_towards_point(Obj_Food_Small.x, Obj_Food_Small.y, 3)
}
} else {
    move_towards_point(Obj_Ant_Home.x, Obj_Ant_Home.y, 3);
}

我想让它测试是否有食物对象,如果有向食物移动,这会将错误类型变为 2,然后蚂蚁会回到家中,除了蚂蚁在创建时只是向右移动,在哪里没有食物。谢谢,如果有人可以提供帮助。

4

2 回答 2

0

这里发生了两件事!修复第一个应该修复第二个。

首先是你说它在回家之前变成了错误类型 2,现在如果我们看一下代码,我们看到它move_towards_point(Obj_Ant_Home.x, Obj_Ant_Home.y, 3);实际上是在if BugType = 1 {.

因此,当错误到达食物时,它们会变成错误类型 2,然后您的返回代码将永远不会真正运行。

所以第二件事:

您的蚂蚁继续移动的原因可能是因为move_towards_point()实际上更改了对象的内置speed变量,该变量可能永远不会被设置回 0。所以,一旦BugType变为 2,则返回主页代码不会运行,并且该错误继续存在他们最后一次的速度。

所有这些你可能想要这样的东西:

if (instance_exists(Obj_Food_Small))
{
    BugType = 1;
    move_towards_point(Obj_Food_Small.x, Obj_Food_Small.y, 3)
}
else
{
    BugType = 2;
    move_towards_point(Obj_Ant_Home.x, Obj_Ant_Home.y, 3);
}

但重要的是不要在只有当错误处于“去获取食物”模式时才执行的区域中拥有返回主页代码

于 2019-09-04T03:36:54.660 回答
0

你有一个太多的括号。我已经删除了提取括号并格式化并更改了代码。我建议不要检查 BugType 是 1 还是 2,而是在有食物时将其分配为 1 或 0,如果没有。

来自文档:

布尔值只是一个可以为真或假的值。请注意,目前 GameMaker: Studio 不支持“真”布尔值,实际上接受任何低于 0.5 的实数作为假值,任何等于(或大于)0.5 的实数作为真。

所以你可以检查 BugType 是 true(0.5 或更大)还是 false(小于 0.5)。

if (BugType){
    if instance_exists(Obj_Food_Small){
        BugType = 1;
        move_towards_point(Obj_Food_Small.x, Obj_Food_Small.y, 3)
    } else {
        BugType = 0;
        move_towards_point(Obj_Ant_Home.x, Obj_Ant_Home.y, 3);
}
于 2019-05-20T00:20:30.603 回答