Keyboard GM:S密钥映射冲突代码错误

Keyboard GM:S密钥映射冲突代码错误,keyboard,keymapping,game-maker,Keyboard,Keymapping,Game Maker,我已经为自定义键映射创建了一个控制室。我有一个想法-如果键被分配给多个控件,那么它会显示为红色。但它只能部分起作用 繁殖代码: with(instance_create(64,64,obj_button_key)) { mytext="UP: "; myKEY=global.keyUP; mytype=1; } with(... scr\u键映射\u冲突参数0: var ii; ii = 0; if (argument0 == global.keyUP) ii+=1;

我已经为自定义键映射创建了一个控制室。我有一个想法-如果键被分配给多个控件,那么它会显示为红色。但它只能部分起作用

繁殖代码:

with(instance_create(64,64,obj_button_key)) {
    mytext="UP: ";
    myKEY=global.keyUP;
    mytype=1;
}
with(...
scr\u键映射\u冲突参数0:

var ii;
ii = 0;

if (argument0 == global.keyUP) ii+=1;
if (argument0 == global.keyDOWN) ii+=1;
if (argument0 == global.keyLEFT) ii+=1;
if (argument0 == global.keyRIGHT) ii+=1;
if (argument0 == global.keySPRINT) ii+=1;
if (argument0 == global.keyCROUCH) ii+=1;
if (argument0 == global.keyGRENADE) ii+=1;
if (argument0 == global.keyACTION) ii+=1;
if (argument0 == global.keyCHAT) ii+=1;
if (argument0 == global.keyMELEE) ii+=1;
if (argument0 == global.keyDROP) ii+=1;

if (ii > 1) {
    return true;
}
抽签:


scr_keymap_conflictargument0提供无效信息似乎有问题,因此有些按钮会变为红色,但有些按钮不会,例如,如果有两个vk_空间控件,则第一个将变为红色,但第二个不会。我感觉draw_set_color会在随机时刻覆盖单独的对象。不管怎样,全球的,关键。。。按住ASCII实值键盘快捷键。在这种情况下,active和mytype并不重要。有人知道如何解决这个问题吗?

您的脚本只在ii等于或大于1时返回一个值。当GM在没有返回值的情况下结束脚本或只是调用return时,返回的值只是随机的,可能是true或false,也可能是hello-world字符串

通常,它是前一个函数的结果

这是第一个bug,但当你修复它时,你会注意到钥匙永远不会变红。。这是因为在语义上,您正在检查一个键是否绑定到两个函数。如果两个函数绑定到两个键,则不会

你需要一个不同的系统,我能想到的最简单的事情就是使用一个控制器代码,下面的代码没有经过测试,只是为了展示这个想法:

创建事件控制对象

step事件控制对象

objKeys的繁殖代码

抽签活动

如果在分配用户输入列表中添加/删除键,控制器的步骤事件可能会被删除。这样列表就不必重建每个步骤。 另外一个明显的改进是将所有这些键隐藏在映射中,而不是简单的变量


此方法具有On time,而不是使用函数实例时得到的On ^2,var

代码看起来是正确的。起初,我尝试使用switchargument0,但没有在末尾添加break,但没有区别。我会继续试验,也许我会得出结论。顺便说一句,我有studio,所以你的文件可能不会工作,我已经有我自己的密钥重新定义脚本,这花了我2天的时间来制作。有没有其他方法来检查具有相同变量的对象?我的意思是类似于instance_numberobj的东西,但更像instance_variableobj,var,如果这些obj实例中有更多具有相同值var variableXyou可以导入项目,则返回true。若您希望将所有具有某些变量的对象都设置为true,则可以创建列表并向其中添加所需的对象。如下所示:global.list=ds\u list\u create;对于obj_敌人{如果aaa=true和bbb=true{ds_list\u addglobal.list,id}}发生了一些奇怪的事情。o我尝试了你的代码,但没有成功。所以我倒过来了。现在,完全没有理由,每当我按下选项按钮转到选项菜单重新分配键时,它就会开始滞后,fps会快速下降,如果房间==rm_选项,控制对象就会跳过,而同时触发这两个-如果房间==rm_菜单{scr_菜单{u init;}否则{scr_其他菜单{u init;}这使得对话框按钮从主菜单和选项屏幕在一个单一的房间。我无法想象这是怎么发生的o.Olol,当我重新安装config删除我游戏的*.ini文件时,它得到了修复。我将使用循环对实例编号和实例查找进行试验:/
if (active) {draw_set_color(c_yellow)}
else if (scr_keymap_conflict(myKEY)) {draw_set_color(c_red)}
else draw_set_color(c_gray);
...
keyUP = ds_list_create();
keyDown = ds_list_create();
keyLEFT = ds_list_create();
keyRIGHT = ds_list_create();
keySPRINT = ds_list_create();
keyCROUCH = ds_list_create();
keyGRENADE = ds_list_create();
keyACTION = ds_list_create();
keyCHAT = ds_list_create();
keyMELEE = ds_list_create();
keyDROP = ds_list_create();
ds_list_clear(keyUP);
ds_list_clear(keyDOWN);
//... etc for all keys

with (objKeys) {
    ds_list_add(myKEY, id);
}
with(instance_create(64,64,obj_button_key)) {
    mytext="UP: ";
    myKEY=objKeyController.keyUP; 
        //notice that it refers to the controller's list
    mytype=1;
}
if (active) {draw_set_color(c_yellow)}
else if (ds_list_size(myKEY) > 1) {draw_set_color(c_red)}
else draw_set_color(c_gray);
...