GameMaker:Studio switch语句不在http async事件中执行

时间:2016-04-24 21:17:00

标签: asynchronous game-maker gml

今天我遇到了运行GameMakers switch语句的主要问题。执行HTTP ASYNC EVENT时,会执行show_message(answer),但其下的switch语句不会执行。

我认为这是一个编译器错误,因为似乎“answer variable”的string_length是1,并使用 string_digits 来确保它逃脱所有可能的空白空间或不必要的字符检索http回调时可能出现的情况。

只有可变的 回答 的返回值为:0,1,2,3,4。

所以这是HTTP ASYNC EVENT的代码:

if(ds_map_find_value(async_load, "id") == request_auth) {

    if(ds_map_find_value(async_load, "status") == 0) {
        callback = ds_map_find_value(async_load, "result");

        var answer = string_digits(callback);
        show_message(answer);

        switch(answer) {
        case USERNAME_EXISTS: 
        show_message("username already exists");
        break;

        case ACCOUNT_CREATED:
        show_message("Your account has been successfully created!");
        break;

        case LOGGED_IN:
         buffer_seek(global.buffer, buffer_seek_start, 0);
         buffer_write(global.buffer, buffer_u8, 0);
         buffer_write(global.buffer, buffer_string, "username");
         Send();
        break;

        case INCORRECT_PASSWORD:
        show_message("your password is incorrect");
        break;

        case INCORRECT_USERNAME:
        show_message("your username is invalid");        
        break;

         }

        }



        else {

       callback = noone; 

        }
    }

1 个答案:

答案 0 :(得分:0)

string_digits返回一个字符串,而不是数值。因此,例如,如果您的字符串显示为“1”,则返回的值将为49,即“1”的ASCII代码。

我相信你的宏被分配给数字(1,2,3 ......)而不是它们的ASCII码(“1”,“2”,“3”...... = 49,50,51。 ..)。这可以解释为什么不会触发案件。

如果您确定已读取开关,请尝试在案例结尾处添加“默认”。如果案件不是,它将被触发。例如,您可以使用它来显示“回答”的值,并验证它是您想要的。