forked from: flash on 2009-8-5
円の弧度(?)とかを出すサンプル
(数学とか分からない人なので間違っている場合はご指摘いただけると助かります)
http://d.hatena.ne.jp/kamip/20090804
元が直ってた。
/**
* Copyright sw_lucchini ( http://wonderfl.net/user/sw_lucchini )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/7s5q
*/
// forked from kamip's flash on 2009-8-5
package {
//円の弧度(?)とかを出すサンプル
//(数学とか分からない人なので間違っている場合はご指摘いただけると助かります)
//http://d.hatena.ne.jp/kamip/20090804
//元が直ってた。
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import net.hires.debug.Stats;
[SWF(backgroundColor="0xffffff", width="465", height="465", frameRate="60")]
public class Ball extends Sprite {
//stageの中心点
private var _center_x:Number = stage.stageWidth / 2;
private var _center_y:Number = stage.stageHeight / 2;
//中心の円のSprite
private var _centerCircle:Sprite = new Sprite();
//周りを回ってる円のSprite
private var _moveCircle:Sprite = new Sprite();
private var _moveCircle_x:Number = 0;
private var _moveCircle_y:Number = 0;
//半径
private var _radius:Number = 50;
//角度
private var _degree:Number = 0;
//弧度
private var _radian:Number = 0;
//回転方向
private var _type:Boolean = true;
private var color:uint;
public function Ball() {
init();
}
private function init():void {
//とりあえず周りを回ってる円をaddChildする
this.addChild(_moveCircle);
color = Math.random() * 0xFFFFFF;
//中心の円は動かないので座標固定でaddChildする
_centerCircle.x = _center_x;
_centerCircle.y = _center_y;
_centerCircle.graphics.beginFill(color, 1);
_centerCircle.graphics.drawCircle(0, 0, 10);
_centerCircle.graphics.endFill();
this.addChild(_centerCircle);
//enterFrameに描画処理入れてたから重くなってた
_moveCircle.graphics.beginFill(color, 1);
_moveCircle.graphics.drawCircle(0, 0, 10);
_moveCircle.graphics.endFill();
addChild(new Stats());
//毎フレームごとにイベントを発生させる
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
//毎フレームごとに発生するイベント
private function onEnterFrame(e:Event):void {
//周りを回っている円のx,y座標を取得
_radian = Math.PI / 180 * _degree;
_moveCircle_x = _radius * Math.cos(_radian) + _center_x;
_moveCircle_y = _radius * Math.sin(_radian) + _center_y;
//取得したx,y座標に円を描く
_moveCircle.x = _moveCircle_x;
_moveCircle.y = _moveCircle_y;
//動かすために弧度に変化をつける
//数値を大きくすれば早く回る
if ( _type == true) {
_degree += 5;
}else {
_degree -= 5;
}
}
//マウスでクリックされたら逆回転になる
private function onMouseDown(e:MouseEvent):void {
if ( _type == true ) {
_type = false;
}else {
_type = true;
}
}
}
}