事件的 GMS2 触发器无法正常工作

问题描述

(首先,我对这一切都很陌生,如果这是浪费时间,请提前道歉)

所以我正在创建一个游戏并决定遵循 Friendly Csmonaut 关于触发器和过场动画的指南。 (链接https://www.youtube.com/watch?v=LDLxCXexcxk

我按照那里的所有内容创建了一些自定义脚本,并且在第一个房间中一切正常,但当我尝试在第二个房间添加触发器时,它根本不起作用。

例如,我创建了一个触发器,当它与播放器对象碰撞时,它会使屏幕抖动(作为测试)并在房间中创建一个对象。但是当代码如下:

getValGood

(我将在帖子中进一步提供所有功能代码) 碰撞时没有任何反应,但是当我将其更改为:

t_scene_info = [

    [screen_shake,6,1000],]

代码在玩家发生碰撞之前运行,只要触发对象被创建。

(同样,我在第一个房间里用前 2 个触发器试过这个,效果很好。)

代码如下:

oCutscene(创建事件):

t_scene_info = [

    [screen_shake(6,1000)],]

oCutscene(步骤事件):

scene_info = -1;
scene = 0;

timer = 0;

scene_info = [
    [create_Box_at_mouse],[cutscene_wait,2],[create_Box_at_mouse],4],[create_Box_at_mouse]
];

event_perform(ev_other,ev_user0);

x_dest = -1;
y_dest = -1;

oCutscene(用户事件 0):

script_execute_alt(current_scene[0],current_scene_array);

oTriggerP (Step event)(当与玩家或玩家(只是一个假人)碰撞时应该执行代码的触发器):

current_scene = scene_info[scene]

var len = array_length_1d(current_scene) -1;

current_scene_array = -1;
current_scene_array = array_create(len,0);
array_copy(current_scene_array,current_scene,1,len);

oTriggerP(创建事件):

if(!instance_exists(oCutscene)){    
  if(place_meeting(x,y,oPlayerD) || place_meeting(x,oPlayer)){
      create_cutscene(t_scene_info);
      instance_destroy();
  }
}

create_cutscene(脚本):

t_scene_info = -1;

cutscene_end_action(脚本):

if(!instance_exists(oCutscene)){    
  if(place_meeting(x,oPlayer)){
        create_cutscene(t_scene_info);
        instance_destroy();
  }
}

cutscene_wait(脚本):

with(oCutscene){
  scene++;
  if(scene > array_length_1d(scene_info)-1){
        instance_destroy();
        exit;
  }
  event_perform(ev_other,ev_user0);
}

script_execute_alt(脚本):

with(oCutscene){
  scene++;
  if(scene > array_length_1d(scene_info)-1){
        instance_destroy();
        exit;
  }
  event_perform(ev_other,ev_user0);
}

screen_shake(脚本):

        ///@description script_execute_alt
    ///@arg ind
    ///@arg [arg1,arg2,...]

    var num1 = argument0;
    var a = argument1;
    var len = array_length_1d(argument1);

    switch(len){
        case 0 : script_execute(0) break;
        case 1 : script_execute(num1,a[0]); break;
        case 2:  script_execute(num1,a[0],a[1]); break;
        case 3:  script_execute(num1,a[1],a[2]); break;
        case 4:  script_execute(num1,a[2],a[3]); break;
        case 5:  script_execute(num1,a[3],a[4]); break;
        case 6:  script_execute(num1,a[4],a[5]); break;
        case 7:  script_execute(num1,a[5],a[6]); break;
        case 8:  script_execute(num1,a[6],a[7]); break;
        case 9:  script_execute(num1,a[7],a[8]); break;
        case 10: script_execute(num1,a[8],a[9]); 
break;
        case 11: script_execute(num1,a[9],a[10]); break;
        case 12: script_execute(num1,a[10],a[11]); break;
        case 13: script_execute(num1,a[11],a[12]); break;
        case 14: script_execute(num1,a[12],a[13]); break;
        case 15: script_execute(num1,a[13],a[14]); break;
        case 16: script_execute(num1,a[14],a[15]); break;
        case 17: script_execute(num1,a[15],a[16]); break;
        case 18: script_execute(num1,a[16],a[17]); break;
        case 19: script_execute(num1,a[17],a[18]); break;
        case 20: script_execute(num1,a[18],a[19]); break;
    }

这是第一个间的 2 个触发器的创建代码

第一次触发(oTriggerP):

///@arg Magnitude
///@arg Time
with(oCamera){

  if(argument0 > shake_remain){
    
      shake_magnitude = argument0;
      shake_remain = argument0;
      shake_length = argument1;
    
  }
      cutscene_end_action();

}

第二个触发器(另一个 oTriggerP):

t_scene_info = [

[cutscene_move_character,oPlayerD,800,279,false,1],[instance_create_layer,oIntro],[cutscene_move_character,1170,];

我真的不认为 cutscene_wait 和 cutscene_move_character 脚本与此有任何关系,但我会把它们扔进去以防万一

cutscene_wait(脚本):

t_scene_info = [

[cutscene_move_character,[room_goto(Prehistoric)]

];

cutscene_move_character(脚本)

/// @description
/// @arg second
with(oCutscene){
    timer++;

    if(timer >= argument[0] * room_speed){

        timer = 0;
        cutscene_end_action();

    }
}

预先感谢您的时间和耐心,如果我没有包含某些内容或搞砸了任何内容,我深表歉意。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...