円の周りを動く円
円の弧度(?)とかを出すサンプル
(数学とか分からない人なので間違っている場合はご指摘いただけると助かります)
http://d.hatena.ne.jp/kamip/20090804
♥0 |
Line 56 |
Modified 2009-08-09 23:33:06 |
MIT License
archived:2017-03-10 11:37:22
ActionScript3 source code
/**
* Copyright kamip ( http://wonderfl.net/user/kamip )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/xsPe
*/
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="30")]
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;
public function Ball() {
init();
}
private function init():void {
//とりあえず周りを回ってる円をaddChildする
this.addChild(_moveCircle);
//中心の円は動かないので座標固定でaddChildする
_centerCircle.x = _center_x;
_centerCircle.y = _center_y;
_centerCircle.graphics.beginFill(0xff58e5, 1);
_centerCircle.graphics.drawCircle(0, 0, 10);
_centerCircle.graphics.endFill();
this.addChild(_centerCircle);
//毎フレームごとにイベントを発生させる
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
//周りを回ってる円のSprite(非動的なパラメーターはここで指定
_moveCircle.graphics.beginFill(0xff58e5, 1);
_moveCircle.graphics.drawCircle(0, 0, 10);
_moveCircle.graphics.endFill();
//カッコイイやつを付ける
addChild(new Stats());
}
//毎フレームごとに発生するイベント
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;
}
}
}
}