问题描述
(首先,我对这一切都很陌生,如果这是浪费时间,请提前道歉)
所以我正在创建一个游戏并决定遵循 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;
}
第一次触发(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 (将#修改为@)