2017-09-22 7 views
1

最近、私はコンピュータゲームを書こうとしています。 私のゲームの一部には、円の周りを回転する敵の写真があります。つまり、回転はしますが正しくはありません。
私のプログラムでは、敵は500ミリ秒ごとにピクセルで前方に移動しなければなりません。しかし、500ミリ秒ごとに、それは円のランダムな点に現れます。
問題の内容がわかりません。ここで
が私のコードです:私のコードで円の周りを回転する画像があるプログラムを書く

<HTML> 
<HEAD> 
<TITLE></TITLE> 
<META NAME="GENERATOR" Content="Microsoft Visual Studio"> 
<META HTTP-EQUIV="Content-Type" content="text/html; charset=UTF-8"> 
<META name="author" content="Javad"> 
<script language="javascript"> 
    function getCoordinates(r,angle) 
    { 
    var coords=[]; 
     with (Math) 
     { 
      if ((angle > 0) && (angle <= 90)) 
      { 
       coords[0]=round(r - r * cos(angle)); 
       coords[1]=round(r - r * sin(angle)); 
      } 
      else if ((angle > 90) && (angle <= 180)) 
      { 
       angle= 180 - angle; 
       coords[0]=round(r + r * cos(angle)); 
       coords[1]=round(r - r * sin(angle)); 
      } 
      else if ((angle > 180) && (angle <= 270)) 
      { 
       coords[0]=round(r + r * cos(angle)); 
       coords[1]=round(r + r * sin(angle)); 
      } 
      else if ((angle > 270) && (angle <= 360)) 
      { 
       angle= 360 - angle; 
       coords[0]=round(r - r * cos(angle)); 
       coords[1]=round(r + r * sin(angle)); 
      } 
     } 
    return coords; 
    } 
    function makePoints(r) 
    { 
    var points=[]; 
    var P= 2 * r * Math.PI; 
     for (var i=1;i<=P;i++) 
      points.push(getCoordinates(r,i/P * 360)); 
    return points; 
    } 
    function createCircle(x,y,r,outlineColor) 
    { 
    var points=makePoints(r); 
    var pixels=[]; 
    var b=false; 
     for (var i in points) 
     { 
      var pixel=document.createElement("DIV"); 
      pixels.push(pixel); 
       with (pixel.style) 
       { 
        fontSize=1; 
        width=1; 
        height=1; 
        position="absolute"; 
        left= x + points[i][0]; 
        top= y + points[i][1]; 
       } 
      pixel.style.backgroundColor=outlineColor; 
      document.body.insertBefore(pixel,enemy); 
     } 
    return pixels; 
    } 
    var myCircle, interval, enemy; 
    //The varible below specifies the index of the DIV element in myCircle Array which the enemy is on. 
    var enemyPosition=0; 
    onload=function() { 
     var x=Math.round(document.body.clientWidth/2 - 50); 
     var y=Math.round(document.body.clientHeight/2 - 50); 
     enemy=document.images[0]; 
     myCircle=createCircle(x, y, 50, "green"); 
     enemy.style.left=parseInt(myCircle[0].style.left) - 16; 
     enemy.style.top=parseInt(myCircle[0].style.top) - 16; 
     interval=setInterval(function() { 
      enemyPosition++; 
      if (enemyPosition == myCircle.length) enemyPosition=0; 
      enemy.style.left=parseInt(myCircle[enemyPosition].style.left) - 16; 
      enemy.style.top=parseInt(myCircle[enemyPosition].style.top) - 16; 
     },500); 
    }; 
</script> 
</HEAD> 
<BODY> 
<img src="enemy.png" style="position:absolute;" width="32" height="32"> 
</BODY> 
</HTML> 

、createCircle機能は、いくつかのDIV要素を作成することで円を作成します。すべてのDIV要素は円のピクセルを表します。この関数は、渡されたx座標とy座標で円を配置します。 outlineColorパラメーターは、円の輪郭線の色を指定します。円を作成した後、この関数は円のピクセルを表すDIV要素の配列を返します。
プログラムのロードが終了すると、このプログラムは円を作成し、プログラムのウィンドウの中央に配置します。次に、このプログラムはsetIntervalメソッドを使用して、500ミリ秒が経過するたびに関数を実行します。この関数は、敵を1ピクセルだけ前方に移動させます。
ところで、あなたが私に答えたいなら、答えにJQueryを使わないでください。 JQueryの使い方は分かりません。

答えて

1

角度をラジアンに変換する必要があります。つまり、正弦と余弦の引数にMath.PI/180を乗算する必要があります。おそらく、この変換を1回だけ行う必要があるように、2番目の変数を導入してください。三角関数は、通常、単位円上の円弧長さの角度を測定するために定義されています。

その後、位置の計算は、それ以降は存在しないものを補正しようとしたように、まだ変わっているかもしれません。

+0

ご回答ありがとうございます。私は自分のプログラムのバグを修正し、敵はかなり正しく回転します。しかし、回転が遅すぎます。だから私はそれをより速く回転させるために、10にsetIntervalメソッドの2番目のパラメータを設定する必要があります。 –

+0

@JavadBayat:はい、または1度以上進めます。 500 msecごとに1°は毎秒2°、毎分120°または3分の1に変換されます。 1秒ごとに10ミリ秒ごとに毎秒100度、したがって3.6秒ごとにフル回転するので、速すぎる可能性があります。 – LutzL

+0

@JavadBayat:r = 50の場合、円上に100 * PI = 314ピクセルが残っているので、上記はまだ概算しています。 – LutzL

関連する問題