2012-12-07 3 views
0

J'ai une fonction qui fait quelques maths sur deux nombres mais je semble obtenir NaN comme un retour pour cela .... Je ne sais pas pourquoi cependant ..... c'est ma fonction:Javascript renvoie NaN

function mouseConvert(mousex,mousey){ 

console.log(mousex+ ' '+ mousey); 

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left; 
    var y = (mousey + Data.offset_y) - settings.offset_top; 
    var tx = Math.round((x + y * 2)/settings.grid) - 1; 
    var ty = Math.round((y * 2 - x)/settings.grid) - 1; 

console.log(tx+ ' '+ ty); 

return [tx,ty]; 
} 

la sortie du journal de la console de la fonction montre:

enter image description here

est ici la valeur pour Data et settings

Pourquoi ne renvoie-t-il pas les nombres mais plutôt NaN?

+0

En utilisant un débogueur, vous pouvez savoir quelles sont les valeurs de toutes les variables où le calcul est fait. –

+0

Vous voulez dire console.log? J'ai ajouté une deuxième image montrant les valeurs d'entrée .... et le résultat. – Sir

+0

Montrez-moi le code d'enregistrement pour la deuxième déclaration –

Répondre

3

Eh bien, si les positions de la souris sont des chaînes comme "0", considérez:

(mousex + Data.offset_x) 

Devient

"0" + -32 //"0-32" 

La chaîne "0-32" sera ensuite tenté d'être converti en un numéro lorsque vous faites la soustraction avec - (settings.width/2). Et Number("0-32") est NaN, après quoi tout devient NaN.

Vous devez les convertir en nombre dès le début. Ou plutôt, ne les convertissez jamais en chaînes en premier lieu, puisque l'objet d'événement les a déjà en nombres ...

0

U doivent convertir mouseX et mouseY int ou flotter parseInt ou parseFloat

<html> 
<head> 
</head> 
<body> 
<script> 
var Data = { ipos: NaN, jpos: NaN, level: "1", money: "1000", offset_x: -32, offset_y: -250}; 
var settings = { grid: 64, height: 500, offset_left: 258, offset_top: 85, width: 1165}; 

function mouseConvert(mousex,mousey){ 
mousex = parseInt(mousex); 
mousey = parseInt(mousey); 
console.log(mousex+ ' '+ mousey); 

    var x = (mousex + Data.offset_x) - (settings.width/2) - settings.offset_left; 
    var y = (mousey + Data.offset_y) - settings.offset_top; 
    var tx = Math.round((x + y * 2)/settings.grid) - 1; 
    var ty = Math.round((y * 2 - x)/settings.grid) - 1; 

console.log(tx+ ' '+ ty); 

return [tx,ty]; 
} 
mouseConvert('0', 1); 
</script> 
</body> 
</html> 

retour

0 1 
-25 2 

sans parseInt il retournera Nan

+0

Une position de souris peut-elle être flottante? ou est-ce que ça accroche à un emplacement entier? – Sir

+0

la position de la souris sera toujours un int. Il n'y a pas de positions de souris subpixel. – Mathias

+0

mais si vous mettez mousex = parseInt (mousex); mousey = parseInt (mousey); le code fonctionne – showi