【问题标题】:GMS2 - Why am I getting this syntax error?GMS2 - 为什么我会收到此语法错误?
【发布时间】:2020-09-04 03:15:57
【问题描述】:

我做了一个库存系统(其他是drop),这里是提货代码

    // pickup

    found_in_inv = false;

    for(var i = 0; i < ds_list_size(global.inv); i++){
        if(global.inv[| i][| 0] == other.object_index){ // error line
            global.inv[| i][| 1]++;
            found_in_inv = true;
            break;
        }
    }

    if(found_in_inv){
        instance_destroy(other);
    }else{
        for(var i = 0; i < ds_list_size(global.inv); i++){
            if(global.inv[| i][| 0] == noone){
                global.inv[| i][| 0] = other.object_index;
                global.inv[| i][| 1] = 1;
                break;
                instance_destroy(other);
            }
        }
    }

我收到一个语法错误,其中“[|”发现,“)”预期。我不知道如何解决这个问题,请帮助。

【问题讨论】:

  • 你试过用[替换global.inv[| i][|)的行吗? (例如:global.inv[i])这对我来说似乎是语法错误。
  • 然后它只是说它得到了“[”而不是“)”
  • 我不确定在任何数组括号内使用| 是否是有效的gml,也许这会导致语法错误,你能把它们全部删除吗?如果没有,你能介意解释一下吗你为什么用那个?
  • 新的 gml 使用 [| index] 现在用于 ds_lists,问题在于 if 语句

标签: gml game-maker-studio-2


【解决方案1】:

仅在 >= 2.3 版本中支持链式访问器(a[i][k] 或 a[|i][|k])(在撰写本文时,is in beta)。

将第一个检索到的项目分配给一个变量以绕过这个事实。
也许也可以借此机会不要做超出您需要的阅读量。

    for(var i = 0; i < ds_list_size(global.inv); i++){
        var item = global.inv[| i];
        if(item[| 0] == other.object_index){ // error line
            item[| 1]++;
            found_in_inv = true;
            break;
        }
    }

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多