2016-04-07 14 views
2

私はshooter0を文字に向かって回転させようとしています(常に動いています)。私はatan()を使用してそれを角度に変換しようとしましたが、shooter0は回転しません。ある点に向かって正方形を回転させる

var shooter0 = document.getElementById('shooter0'); 
var character = document.getElementById('character'); 
var tracker0 = shooter0.getContext('2d'); 
// The cordinates for the character and shooter0 
var characterLeft = 530; 
var characterTop = 180; 
var shooter0Left = 960; 
var shooter0Top = 470; 

while (characterLeft >= 700){ 
    setInterval(startShooter, 1000); 
} 


function startShooter(){ 
    //Getting all the variable to be able to calculate the angle of the hypotenuse 
    var dX = characterLeft - tracker0Left; 
    var dY = characterTop - tracker0Top; 
    var arcTan = Math.atan(dX/dY)* 180/Math.PI; 

    var cx = shooter0.width/2; 
    var cy = shooter0.height/2; 


    tracker0.save(); 
    tracker0.translate(cx, cy); // pivot point 
    //rotating the square towards the character 
    tracker0.rotate(arcTan * Math.PI/180); 
    //Drawing the square 
    tracker0.fillRect(400, 300, 100, 100); 
    tracker0.restore(); 
} 

HTML:

<canvas id="character" height="50px;" width="50px;"></canvas> 
<canvas id="shooter0" height="100px;" width="100px;"></canvas> 

とCSS:

#character{ 
    position: absolute; 
    top: 180px; 
    left: 530px; 
    border: 3px solid black; 
    background-color: orange; 
} 
#shooter0{ 
    position: absolute; 
    left: 960px; 
    top: 470px; 
    border: 2px solid black; 
    background-color: #B40404; 
} 

申し訳ありませんが、コードはかなり厄介見つけた場合。あなたがそれを見つけたら、私のコードをすべて手に入れたバイブルです。 https://jsfiddle.net/Snubben/tc0j4psz/3/ JQueryを使用しないでください。

答えて

0

私は何かの理由であなたのフィドルを動作させることができなかったので、少しの例を作りました。

私はあなたのコードに気づく事:

var arcTan = Math.atan(dX/dY)* 180/Math.PI;:ラジアン単位の角度を返しますMath.atan。そして、あなただけ再びここに戻ってラジアンに変換する180/Math.PI

によって度に変換します tracker0.rotate(arcTan * Math.PI/180);

次に、(ラジアン)の角度を計算するために、私はMath.atan2を使用するのが最も簡単だと思います。Math.atan2 - MDN

2点間の角度を計算するMath.atan2の使用法は次のとおりです。 その情報に基づいてMath.atan2(point2.y - point1.y, point2.x - point1.x)

、私はあなたが非常に遠く取得することができると思います。

demo fiddle

関連する問題