Я только что реализовал движение для своего главного персонажа в моей игре 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 место возвращается в порядке и спрайт действительно появляются там, где он должен он просто не двигается правильно
Похоже, что 'location_X' и' location_Y' являются строками вместо цифр. Поэтому вычисления не будут работать, как вы ожидаете (добавление, например, приведет к конкатенации). Попробуйте применить 'parseInt()' к этим значениям при чтении полезной нагрузки JSON. –
Если бы вы были рядом со мной, я бы обнял вас! Это совсем не передумало, спасибо очень! искал веки!, пожалуйста, поставьте это как anser, чтобы я мог отметить его как таковой и повысить его благодаря –