2013-04-14 2 views
2

Я только что реализовал движение для своего главного персонажа в моей игре JavaScript/HTML5, и все хорошо, за исключением того, когда я загружаю существующих пользователей в сохраненные данные.Ajax call делает sprite motion мерцание javascript

В моем основном файле JavaScript в зависимости от того, нажал ли пользователь кнопку новой игры или загрузила игру либо загрузили новую игру, либо загрузили данные пользователей из БД через PHP и Ajax.

Если пользователь нажмет новую игру он работает ниже код и игрок перемещается отлично:

else{ 
     //set beginning params 
     //Change screens 
     ui.new_game(); 

     layer = scene.load("level_"+1); 
     layer = $.isArray(layer) ? layer : layer.layers; 

     layer.forEach(function(layer){ 
      if (layer.hasOwnProperty("properties") && layer.properties.hasOwnProperty("collision")) 
      { 
       scene.collisionLayer(layer); 
      } 
     }); 

     gameGUI.set_level(1); 
     gameGUI.set_location(20,20); 
     gameGUI.init_inv(); 
     player.init_Player(20,20); 
     player.draw(); 
     last_update = Date.now(); 

    } 

НО если игрок решит загрузить свои предыдущие настройки игр ниже код выполняется и вместо спрайта перемещения плавно в холсте, когда клавиша нажата клавиша со стрелкой вправо, спрайт исчезнет, ​​а затем мерцает где-то в правой части экрана, а затем снова исчезнет.

function game_settings(state){ 
    if(state == "load"){ 

     ui.load_game(); 

     //do ajax call to load user last save 
     var dataString = {"user_data": "true"}; 
     $.ajax({ 
      type:"POST", 
      url:"PHP/class.ajax.php", 
      data: dataString, 
      dataType: 'JSON', 
      async:false, 
      success: function(success) { 
       player_details_init(success); 

      }, 
      error: function(){ 
       alert("ERROR in User data"); 
      } 
     }); 

     layer = scene.load("level_"+level); 
     layer = $.isArray(layer) ? layer : layer.layers; 

     layer.forEach(function(layer){ 
      if (layer.hasOwnProperty("properties") && layer.properties.hasOwnProperty("collision")) 
      { 
       scene.collisionLayer(layer); 
      } 
     }); 
     player.init_Player(location_X,location_Y); 
     player.draw(); 
     last_update = Date.now(); 

    } 

Я знаю, что Аякс причиняет проблему, потому что, когда я закомментировать Спрайт движется, как это следует делать, только проблема в том, что я не знаю, почему Ajax вызывает это странное поведение?

Я загрузил текущую версию игры в HERE, чтобы вы могли наблюдать странное поведение, если хотите.

Чтобы войти использование

  • гостя - имя пользователя
  • гостя - пароль

Спасибо за ваше время

EDIT Ok я сузил проблему еще дальше к переменным location_X, location_Y. Whne я придерживаюсь жестко запрограммированным номером, скажем, 20, 20 в playr.init вызывает движение работает нормально, но когда я использую location_X, location_Y, как вы видите в примере, проблема все еще происходит, как указано выше.

Я извлекаю location_X и location_Y из функции, вызываемой, когда Ajax возвращает успех, называемый player_details_init. Вот эта функция:

function player_details_init(success){ 

    $.each(success, function(key,value){ 
     if(level == null){ 
      level = value.level; 
     } 
     if(location_X == null){ 
      location_X = value.location_X; 
     } 
     if(location_Y == null){ 
      location_Y = value.location_Y; 
     } 
     //items.push([value.game_item_id, value.quantity]); 

     gameGUI.set_level(level); 
     gameGUI.set_location(location_X,location_Y); 
     gameGUI.init_inv(); 
    }); 
} 

SO я думаю, это что-то делать с этой функцией, хотя, когда я делаю console.log место возвращается в порядке и спрайт действительно появляются там, где он должен он просто не двигается правильно

+0

Похоже, что 'location_X' и' location_Y' являются строками вместо цифр. Поэтому вычисления не будут работать, как вы ожидаете (добавление, например, приведет к конкатенации). Попробуйте применить 'parseInt()' к этим значениям при чтении полезной нагрузки JSON. –

+0

Если бы вы были рядом со мной, я бы обнял вас! Это совсем не передумало, спасибо очень! искал веки!, пожалуйста, поставьте это как anser, чтобы я мог отметить его как таковой и повысить его благодаря –

ответ

1

Опишите основные факторы, которые вы описываете: location_X и location_Y являются строками вместо цифр. В этой ситуации вычисления не будут работать, как вы ожидаете (добавление, например, приведет к конкатенации).

Я бы посоветовал вам попробовать применить parseInt() к этим значениям (и, возможно, другим пользователям) при чтении полезной нагрузки JSON.

Смежные вопросы