package {
import flash.display.Sprite;
import flash.geom.Point;
import flash.events.Event;
public class Game2 extends Sprite {
var balls:Array;
var radius:Number = 50;
var centerX:Number = stage.stageWidth / 2;
var centerY:Number = stage.stageHeight / 2;
var i:int = 0;
var angle:Number = 0.1;
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
public function Game2() {
init();
}
function init():void
{
balls = new Array();
for(i = 0; i < 8; i++)
{
var ball:Ball = new Ball(10, 0x00FF00);
var xposition = centerX + Math.cos(i / 8 * Math.PI * 2) * radius;
var yposition = centerY + Math.sin(i / 8 * Math.PI * 2) * radius;
ball.x = xposition;
ball.y = yposition;
addChild(ball);
balls.push(ball);
}
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
function onEnterFrame(e:Event):void
{
for(i = 0; i < balls.length; i++)
{
var ball:Ball = balls[i];
var x1:Number = ball.x - stage.stageWidth / 2;
var y1:Number = ball.y - stage.stageHeight / 2;
var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;
ball.x = stage.stageWidth / 2 + x2;
ball.y = stage.stageHeight / 2 + y2;
}
}
}
}
誰かがこの式の働きを説明できますか?:
var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;
次のように編集すると、理解できません。
var x2:Number = x1 - y1;
var y2:Number = x1 + y1;
すべてのボールが非常に速く移動し、画面の境界から外れます。また、次のように変更すると、次のようになります。
var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;
or
var x2:Number = cos * x1 - sin * y1;
var y2:Number = cos * y1 + sin * x1;
私が理解している限り、これはある種の対称性が発生します。左側または右側にいる場合、速度x == 0であり、yがその位置の最大速度にある場合、yは毎回遅くなります。彼は上または下に近づきます。私たちが上または下にいる場合、速度y == 0であり、xが彼の位置の最大速度にある場合、彼が右側または左側に近づくたびに速度も低下します。それですが、なぜそれをcosとsinで乗算する必要があるのか理解できません。この瞬間を追跡しましたが、それでも理解できません。誰かがこの瞬間を説明できますか?