gamemaker的一个小问题

2024-11-09 20:44:03
推荐回答(2个)
回答1:

因为计时器是变量,你如果判断碰撞已经生效的话if里面的内容将被重复的执行,那样计时器就动不了了。所以如果在步事件中会用到一个复合判断

//a的步事件中,PS:下次别用内置变量当作物体名称,容易发生冲突,那我就对应改成a和b了
if(place_meeting(x,y,a))
{
    if(alarm[1] < 0)
    {
        alarm[1] = 45;
    }
}
//a的Alarm 1事件中
//你需要执行的代码段

那么,我们也可以直接使用碰撞事件进行判断

//a碰撞b的事件中
if(alarm[0] < 0)
{
    alarm[1] = 45;
}
//a的Alarm 1事件中
//你想要执行的代码段

那么根据我上述的代码做出来的效果就是假如a和b一直保持接触的话,那么每隔45步就会发生计时器1里面的动作。所以呢,有考虑到你可能是希望即使保持接触也指在一个45步执行,因此我提供了另一种解决方案:

//a的创建事件中
col = false;
//a的步事件中
col = false;
//a的碰撞事件中
if(col == false)
{
    alarm[1] = 45;
    col = true;
}
//a的Alarm 1事件中
//你需要执行的代码段

这样我引入了一个判断是否碰撞的变量,以控制判断来保证我这里面即使一直接触也是只在第一个45步之后执行一次,此后无论间隔多少次45步都不再执行。碰撞事件中的动作一旦碰撞成立便会像步事件那样进行,但是不用担心和步事件的变量设置发生冲突,因为碰撞的步事件明显是后于步事件的(如果你不放心,可以把原来步事件中的代码放到开始步事件中来执行,确保万无一失)因此一旦碰撞撤去的话,col还会变成false,所以下一次碰撞到这个物体的时候仍然45步后执行Alarm 1

望采纳,GameMaker吧为您服务

回答2:

因为计时器是变量,你如果判断碰撞已经生效的话if里面的内容将被重复的执行,那样计时器就动不了了。所以如果在步事件中会用到一个复合判断
//a的步事件中,PS:下次别用内置变量当作物体名称,容易发生冲突,那我就对应改成a和b了
if(place_meeting(x,y,a))
{
if(alarm[1] < 0)
{
alarm[1] = 45;
}
}
//a的Alarm 1事件中
//你需要执行的代码段
那么,我们也可以直接使用碰撞事件进行判断
//a碰撞b的事件中
if(alarm[0] < 0)
{
alarm[1] = 45;
}
//a的Alarm 1事件中
//你想要执行的代码段
那么根据我上述的代码做出来的效果就是假如a和b一直保持接触的话,那么每隔45步就会发生计时器1里面的动作。所以呢,有考虑到你可能是希望即使保持接触也指在一个45步执行,因此我提供了另一种解决方案:
//a的创建事件中
col = false;
//a的步事件中
col = false;
//a的碰撞事件中
if(col == false)
{
alarm[1] = 45;
col = true;
}
//a的Alarm 1事件中
//你需要执行的代码段
这样我引入了一个判断是否碰撞的变量,以控制判断来保证我这里面即使一直接触也是只在第一个45步之后执行一次,此后无论间隔多少次45步都不再执行。碰撞事件中的动作一旦碰撞成立便会像步事件那样进行,但是不用担心和步事件的变量设置发生冲突,因为碰撞的步事件明显是后于步事件的(如果你不放心,可以把原来步事件中的代码放到开始步事件中来执行,确保万无一失)因此一旦碰撞撤去的话,col还会变成false,所以下一次碰撞到这个物体的时候仍然45步后执行Alarm
1
望采纳,GameMaker吧为您服务