0

私は2つの数値でいくつかの数学を行う関数を持っていますが、その戻り値として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];
} 

関数からのコンソール ログ出力には、次のように表示されます。

ここに画像の説明を入力

Dataとの値は次のとおりです。settings

ここに画像の説明を入力

数値ではなく NaN を返すのはなぜですか?

4

2 に答える 2

3

マウスの位置が のような文字列の場合は、次の"0"ことを考慮してください。

(mousex + Data.offset_x)

なる

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

で減算を行うと、文字列"0-32"は数値に変換されます- (settings.width/2)。そしてNumber("0-32")ですNaN, その後 すべて になりNaNます .

最初に数値に変換する必要があります。むしろ、イベントオブジェクトはすでに数値として持っているので、そもそもそれらを文字列に変換しないでください...

于 2012-12-07T21:24:01.937 に答える
0

UはmouseXとmouseYをintまたはfloatparseIntまたは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>

戻る

0 1 
-25 2 

parseIntがないと、Nanが返されます

于 2012-12-07T21:15:20.530 に答える