2016-04-24 100 views
1

今天我遇到了GameMakers切换语句正在执行的主要问题。当执行HTTP ASYNC EVENT时,show_message(answer);被执行,但它下面的switch语句没有。我认为这是一个编译器错误,因为它似乎是“答案变量”的string_length是1,并且使用string_digits来确保它逃避所有可能出现的空格或不必要的字符,这些字符可能在检索http回调时出现。可变答案的 唯一可能返回的值是:0,1,2,3,4,GameMaker:Studio切换语句不会在http异步事件中执行

因此,这里是HTTP ASYNC事件的代码:

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; 

     } 
    } 

预先感谢所有解答!干杯!

+0

宏中的哪些值?它是数字('0','1','2'等)还是字符串('“0”,“1”,“”2“等)? – Dmi7ry

回答

0

string_digits返回一个字符串,而不是一个数字值。例如,如果你的字符串表示“1”,那么返回的值将是49,这是“1”的ASCII码。我相信你的宏被分配给数字(1,2,3 ......)而不是他们的ASCII码(“1”,“2”,“3”... = 49,50,51 ...)。这可以解释为什么这些案件没有被触发。

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