【发布时间】:2014-01-19 00:28:48
【问题描述】:
我为自定义键映射创建了一个控制室。我有一个想法 - 如果键被分配给多个控件,那么它会显示为红色。但它只是部分起作用。
生成代码:
with(instance_create(64,64,obj_button_key)) {
mytext="UP: ";
myKEY=global.keyUP;
mytype=1;
}
with(...
scr_keymap_conflict(argument0):
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;
}
画:
if (active) {draw_set_color(c_yellow)}
else if (scr_keymap_conflict(myKEY)) {draw_set_color(c_red)}
else draw_set_color(c_gray);
...
scr_keymap_conflict(argument0) 提供无效信息似乎有问题,所以有些按钮会变成红色,但有些不会,例如,如果有两个 vk_space 控件,那么第一个会变成红色,但是第二个不会(我感觉draw_set_color 在随机时刻覆盖单独的对象)。无论如何,global.key... 保存 ASCII 实数值(键盘快捷键)。 active 和 mytype 在这种情况下并不重要。有人知道如何解决这个问题吗?
【问题讨论】:
-
一开始我尝试使用
switch(argument0),最后没有添加break,但没有区别。好吧,我会继续尝试,也许我会得出一个结论。顺便说一句,我有工作室,所以你的文件可能无法正常工作,而且我已经有了自己的密钥重新定义脚本(我花了大约 2 天的时间来制作) -
是否有不同的方法来检查具有相同变量的对象?我的意思类似于
instance_number(obj),但更像instance_variable(obj,var),如果更多这些obj实例具有相同的值var变量,则返回true -
你可以导入项目。如果您想获取所有具有
true变量的对象,您可以创建列表并向其中添加所需的对象。像这样:global.list = ds_list_create(); with (obj_enemy) { if (aaa=true and bbb=true) { ds_list_add(global.list, id) } }
标签: keyboard keymapping game-maker