Bug - Jogo HTML5 + Javascript

Loppersy

Power Member
Boas,

Eu ando a desenvolver um jogo simples em HTML5 + Javascript. Hoje, quando estava a trabalhar no sistema de salvar o jogo encarei-me com um problema que não estou a conseguir resolver. No jogo a tecla "P" serve para colocar e retirar este da pausa, mas quando guardo o jogo, actualizo a página e carrego o jogo guardado a tecla "P" deixa de funcionar, ou seja deixo de poder colocar o jogo em pausa.

Alguém me consegue dizer onde está o problema?

Questão resolvida, links removidos.
 
Última edição:
Boas vê se resolve dessa maneira ;

function loadGame(){
var save = getCookie("save1");
var now = new Date().getTime();
save = save.split("&&");
Game.data.money = Number(save[0]);
Game.data.EnemiesKilled = Number(save[1]);
Game.data.shootsDispared = Number(save[2]);
Game.data.score = Number(save[3]);
Game.data.level = Number(save[4]);
Game.data.startTime = Number(save[5]);
Game.data.lastShoot = Number(save[6]);
Game.data.paused = (save[7] == "true); // <--- save[7] é uma string com o valor "true" ou "false"
Game.data.gameStarted = (save[9] == "true"); // <--- save[9] é uma string com o valor "true" ou "false"
Game.data.lastSave = Number(save[15]);
//Re-adjust time
Game.data.pausedTime = Number(save[8]) + Number(((now - Game.data.lastSave)/1000).toFixed(0));
Game.data.gameover = (save[10] == "true"); // <--- save[10] é uma string com o valor "true" ou "false"


PS: Na parsing do json guardado tem que converter as strings para valores booleanos de alguma maneira
o mais simples é verificar com a comparação da string com a string "true"
 
Boas vê se resolve dessa maneira ;

function loadGame(){
var save = getCookie("save1");
var now = new Date().getTime();
save = save.split("&&");
Game.data.money = Number(save[0]);
Game.data.EnemiesKilled = Number(save[1]);
Game.data.shootsDispared = Number(save[2]);
Game.data.score = Number(save[3]);
Game.data.level = Number(save[4]);
Game.data.startTime = Number(save[5]);
Game.data.lastShoot = Number(save[6]);
Game.data.paused = (save[7] == "true); // <--- save[7] é uma string com o valor "true" ou "false"
Game.data.gameStarted = (save[9] == "true"); // <--- save[9] é uma string com o valor "true" ou "false"
Game.data.lastSave = Number(save[15]);
//Re-adjust time
Game.data.pausedTime = Number(save[8]) + Number(((now - Game.data.lastSave)/1000).toFixed(0));
Game.data.gameover = (save[10] == "true"); // <--- save[10] é uma string com o valor "true" ou "false"


PS: Na parsing do json guardado tem que converter as strings para valores booleanos de alguma maneira
o mais simples é verificar com a comparação da string com a string "true"

O Json não deveria preservar os valores boleanos? Supostamente o Json não suporta números, strings e boleanos?
Desculpa a noobice mas nunca tive aulas de programação.

Cumprimentos.
 
O JSON suporta um valor do tipo Sequência de caracteres, Número e Boolean.
Ele só não suporta valores octais e hexadecimais.

E já fizeste as alterações ?
 
O JSON suporta um valor do tipo Sequência de caracteres, Número e Boolean.
Ele só não suporta valores octais e hexadecimais.

E já fizeste as alterações ?

Já e funcionou :D
Muito obrigado, se não for muito chato agradecia que me explicasses melhor porque é que isto não estava a funcionar. Ainda só tenho 17 anos e estou a aprender isto sozinho (tenho só ajuda de pessoas dos foruns). Então, eu não estava a receber boleanos nas variáveis save[07], save[9] e save[10], porquê?

Obrigado desde já.
 
Já e funcionou :D
Muito obrigado, se não for muito chato agradecia que me explicasses melhor porque é que isto não estava a funcionar. Ainda só tenho 17 anos e estou a aprender isto sozinho (tenho só ajuda de pessoas dos foruns). Então, eu não estava a receber boleanos nas variáveis save[07], save[9] e save[10], porquê?

Obrigado desde já.

Mudas-te tudo para "true" certo? é fácil é onde ficavam os saves (Paragens) estão em strings e como o problema vinha dai terias de inserir os booleanos só isso, porque faltava indicares se era a gravação falsa ou verdadeira não sei se me faço compreender, mas ao menos és sincero ainda não sabes muito de programação e dai terás sempre a minha ajuda coisa que alguns nunca terão a minha ajuda ;)
 
Mudas-te tudo para "true" certo? é fácil é onde ficavam os saves (Paragens) estão em strings e como o problema vinha dai terias de inserir os booleanos só isso, porque faltava indicares se era a gravação falsa ou verdadeira não sei se me faço compreender, mas ao menos és sincero ainda não sabes muito de programação e dai terás sempre a minha ajuda coisa que alguns nunca terão a minha ajuda ;)

Heich pois é! Eu sabia que os cookies eram armazenados com strings e por isso usei a função Number(), para converter as strings com números em números mas esqueci-me de fazer o mesmo para os boleanos. Agora fui rever o código e na função que lê o estado do jogo para o colocar em pausa:

if(Game.data.paused){ //Aqui seja a string "true" ou "false" ele ia sempre passar neste "if" visto que a variável de uma forma ou de outra tinha um valor e ia considerar que o jogo estava em pausa e por isso não o ia colocar em pausa quando eu clicava no "P".

Agora sim já percebi a 100% porque é que o código não funcionava.
Mais uma vez muito obrigado pela ajuda ;)

PS: Agora é só criar uma pequena função para converter as strings "false" em false e as strings "true" em true, para não ter de forçar aqueles valores nas variáveis.
 
O meu host é case sensitive e eu não sabia. Já corrigi os links das imagens e consequentemente o jogo já ficou operacional.
Questão resolvida, links removidos.

Não estava a espera que isto te pudesse ajudar :p

Depois gostaría de testar e dar-te algum feedback, se precisares

Cumps e boa sorte!
 
Heich pois é! Eu sabia que os cookies eram armazenados com strings e por isso usei a função Number(), para converter as strings com números em números mas esqueci-me de fazer o mesmo para os boleanos. Agora fui rever o código e na função que lê o estado do jogo para o colocar em pausa:

if(Game.data.paused){ //Aqui seja a string "true" ou "false" ele ia sempre passar neste "if" visto que a variável de uma forma ou de outra tinha um valor e ia considerar que o jogo estava em pausa e por isso não o ia colocar em pausa quando eu clicava no "P".

Agora sim já percebi a 100% porque é que o código não funcionava.
Mais uma vez muito obrigado pela ajuda ;)

PS: Agora é só criar uma pequena função para converter as strings "false" em false e as strings "true" em true, para não ter de forçar aqueles valores nas variáveis.

Essa parte do JavaScript (tipos de dados, conversão implícita e os dois tipos de comparação ou a equidade no geral) é complicada, porque é diferente daquilo que o pessoal (com background noutros ambientes de desenvolvimento) espera.

Recomendo-te que dês uma vista de olhos nos capítulos 7, 8 e 9 do Speaking JavaScript (gratuito aqui: http://speakingjs.com/es5/).
 
Back
Topo