シュールなAS3.0 #2 スプライトで☆を描画
初心者用 ※備忘録&実験
間違いなどの指摘があるとよい
♥0 |
Line 37 |
Modified 2011-08-22 16:50:23 |
MIT License
archived:2017-03-20 02:10:18
ActionScript3 source code
/**
* Copyright ultraTakePon ( http://wonderfl.net/user/ultraTakePon )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/7sTI
*/
package {
import flash.geom.Point;
import flash.display.Sprite;
import flash.events.*;
public class FlashTest extends Sprite {
public function FlashTest() {
// write as3 code here..
var 頂点の数:uint = 5; // 五角形の中に☆をつくりたい ※でかい値にするとえげつないことになります(わらい
var 偶数奇数:uint = 0;
var 半径:uint = 100;
this.graphics.beginFill(0xFF0000); // 塗りつぶし色を指定
this.graphics.lineStyle(5,0x0,0.5); // 線の太さを5、色を黒、透明度をなぜか0.5に指定
// ここからが★を描くための主な処理
// 「頂点の数 / 2」は五角形から☆を作る流れを意識したものです
for (var 角度:Number = 0; 角度 < 360; 角度 += 360 / 頂点の数 / 2)
{
// 中心からの距離を決定します
// 偶数奇数で半分にするかどうかを決めています(交互に値を変えるための処置)
var 中心からの距離:Number;
if (偶数奇数++ % 2) 中心からの距離 = 半径 * 0.5; // 奇数であれば半分
else 中心からの距離 = 半径; // 偶数であればそのままの半径
// 各頂点座標を計算します
// 「Math.PI / 180」を乗算する意味は、「角度をラジアン値に変換する」
// cos,sinはあの・・えっと・・・うん!!えっと、円のあれです
var x:Number = Math.cos(角度 * Math.PI / 180) * 中心からの距離;
var y:Number = Math.sin(角度 * Math.PI / 180) * 中心からの距離;
//this.graphics.drawCircle(x,y,1); // 頂点ん座標の位置を確認する用
// 点をmoveToとlineToを使用してつないでいきます
if (角度) this.graphics.lineTo(x,y); // 角度が0以外はlineTo
else this.graphics.moveTo(x,y); // 角度が0のときは最初ということでmoveTo
}
// つないだPath?内を塗りつぶします
this.graphics.endFill();
// graphicsに描画した☆の中心座標がデフォルトで(x,y) = (0,0)なので見える位置に移動
this.x = 100;
this.y = 100;
// 以下、蛇足です
// 動的な感じにしたかったんです
// 「addEventListener」の意味は、スクリプトを実行している際に発生しているイベントを(スルーしていたもの)受け取るようにすることです
// Event.ENTER_FRAMEは1フレーム毎に発生するイベントで、画面が手前にきているときに発生するようです(別の窓が手前にあると発生しないということ)
// ↓ではそのイベントを受け取ったときにonEnterFrameという自作の関数を呼び出すようにしています
this.addEventListener(Event.ENTER_FRAME,onEnterFrame)
// 無名関数は使えないのかな?
/* function ():void
{
//this.rotation++;
this.x += 11;
});*/
}
// 色々プロパティをいじっています
private function onEnterFrame(e:Event):void
{
this.x = 1 + (this.x % stage.stageWidth);
this.y = 1 + (this.y % stage.stageHeight);
this.rotation += 1;
this.rotationX += 1;
this.scaleX = -0.01 + (this.scaleX % 2);
this.scaleY = -0.01 + (this.scaleY % 2);
}
}
}