游戏制作者 - 并非所有对象都有效

时间:2016-04-30 20:26:33

标签: game-maker

这是我的代码(放置在一个步骤事件中)

if (place_meeting(x,y,Obj_Player))
{
    time = 50
}
if (time > 0)
{
    Obj_Player.jsp = 17;
}
else
{
    Obj_Player.jsp = 12;
}
if (time > 0) time -= 1;

放置在创建活动中:

image_speed = 0.4;
time = 0;
new = 17

出于某种原因,具有此代码的一个对象将起作用,但其余的则不起作用。我不知道为什么,我需要房间里有多件物品。

此外,创建事件中的项目,我想进入每个单独项目的创建代码。我只想修改new所以我必须移动所有代码还是new

1 个答案:

答案 0 :(得分:1)

当您使用Obj_Player.blablabla时,GMS将首先创建该对象的实例。您需要使用将返回id实例的函数。例如,instance_place()。我不知道你究竟在做什么,所以代码可能无法使用:

所有实例都有一个全局计时器的示例:

var obj = instance_place(x, y, Obj_Player);
if obj != noone
{
    with Obj_Player
    {
        time = 50;
    }
}

with Obj_Player
{
    if (time > 0) time--;
}

接下来是Obj_Player

// Create
time = 0;

// Step
if time > 0
    jsp = 17;
else
    jsp = 12;


每个实例都有一个独立的本地计时器示例:

var obj = instance_place(x, y, Obj_Player);
if obj != noone
    obj.time = 50;

接下来是Obj_Player

// Create
time = 0;

// Step
if time > 0
    jsp = 17;
else
    jsp = 12;

if (time > 0) time--;

更新:

  

为了澄清,我有一个Obj_Player和多个包含代码的项目。

我想我明白你要做什么

Obj_Player,创建:

time = 0;

Obj_Player,碰撞事件(与您的对象):

time = 50;

Obj_Player,Step event:

time--;
if time > 0
    jsp = 17;
else
    jsp = 12;

这就是全部。

如您所见,所有代码都放在Obj_Player。因为当你做的时候

if time > 0
    Obj_Player.jsp = 17;
else
    Obj_Player.jsp = 12;

并且您拥有此代码的多个实例,jsp仅在所有实例具有17时才会time > 0。实际上,jsp将包含最后一个实例的检查结果(因为最后一次检查将取代之前的任何结果)。



  

此外,创建事件中的项目,我想进入每个单独项目的创建代码。我只想修改new所以我必须移动所有代码还是new

new。首先将调用Create事件(如果我们正在讨论GMS,而不是关于GM8),然后调用Creation code,那么使用Creation code您只需修改所有内容,Create {1}}事件。