Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
ActionScript
/** <1にょっ木 - 桜咲け!> 画像を使わずに木を生成してみました。 受験のシーズンということで、桜(っぽい何か)です。 画面をクリックするとはげた土が出来ます。 はげた土をクリックすると木が生えます。 木が生えた土をクリックすると木が消えます。 木が生える時に、その土はプライオリティが一番手前にきます(なぜか)。 たまに咲きすぎて重くなります。頑張れ受験生... <1NyoKi - BLOOM Cherry Blossoms(like)!> click stage to generate free ground. click free ground to generate tree. click planted ground to remove tree. generating tree will set the ground priority as top. sometimes too heavy bloom cause frame rate issue. */ package { import flash.display.Sprite; import flash.events.MouseEvent; [SWF(backgroundColor='#000000', frameRate='30', width='465', height='465')] public class Main extends Sprite { public function Main() { stage.addEventListener( MouseEvent.CLICK, onClickStage ); } private function onClickStage( e:MouseEvent ):void { var nyo_ground:NyoGround = new NyoGround(); nyo_ground.x = e.stageX; nyo_ground.y = e.stageY + 10; addChild( nyo_ground ); } } } import flash.display.GradientType; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Matrix; import flash.geom.Point; class NyoGround extends Sprite { private var _step:int; private var _anchor_point:Array; private var _control_point:Array; public function NyoGround() { super(); var m:Matrix = new Matrix(); m.createGradientBox( 100, 30, 90 * Math.PI / 180, 0, -30 ); graphics.beginGradientFill( GradientType.LINEAR, [ 0x804000, 0x804000 ], [ 1, 0 ], [ 172, 255 ], m ); graphics.moveTo( -50, 0 ); graphics.curveTo( 0, -50, 50, 0 ); graphics.endFill(); addEventListener( MouseEvent.CLICK, onClickGround ); } private function onClickGround( e:MouseEvent ):void { if ( numChildren ) { removeChildAt( 0 ); } else { var nyo_tree:NyoTree = new NyoTree(); nyo_tree.y = -10; addChild( nyo_tree ); parent.setChildIndex( this, parent.numChildren - 1 ); } // stop event-notice e.stopPropagation(); } } class NyoTree extends Sprite { // Life private const MAX_LIFE:int = 18; private const MIN_LIFE:int = 2; private const LIFE_DEGENERATE_RATE:int = 3; // Branch private const BRANCH_MIN_LENGTH:int = 10; private const BRANCH_LENGTH_RATE:int = 5; private const BRANCH_SPREAD_RATE:int = 30; private const BRANCH_CONTINUOUS:int = 20; private const BRAHCN_THICKNESS:int = 2; // variable private var _life:int; private var _branch_point:Point; private var _rotate:int; public function NyoTree( life:int = MAX_LIFE, parent_rotate:int = -180 ) { // adjust life _life = ( life < 0 ) ? 0 : life; // generate BranchPoint _branch_point = new Point( 0, BRANCH_MIN_LENGTH + Math.floor( Math.random() * life * BRANCH_LENGTH_RATE ) ); // calculate Vertex var point_l:Point = new Point( - life * BRAHCN_THICKNESS / 10, 0 ); var point_tl:Point = new Point( - life * BRAHCN_THICKNESS / 15, _branch_point.y ); var point_tr:Point = new Point( life * BRAHCN_THICKNESS / 15, _branch_point.y ); var point_r:Point = new Point( life * BRAHCN_THICKNESS / 10, 0 ); // decide Rotation var r:int = -BRANCH_SPREAD_RATE + Math.floor( Math.random() * BRANCH_SPREAD_RATE * 2 ); _rotate = parent_rotate + r; // apply Rotation var m:Matrix = new Matrix(); m.rotate( _rotate * Math.PI / 180 ); _branch_point = m.deltaTransformPoint( _branch_point ); point_l = m.deltaTransformPoint( point_l ); point_tl = m.deltaTransformPoint( point_tl ); point_tr = m.deltaTransformPoint( point_tr ); point_r = m.deltaTransformPoint( point_r ); // draw Branch graphics.beginFill( 0x804000 ); graphics.moveTo( point_l.x, point_l.y ); graphics.lineTo( point_tl.x, point_tl.y ); graphics.lineTo( point_tr.x, point_tr.y ); graphics.lineTo( point_r.x, point_r.y ); graphics.endFill(); addEventListener( Event.ENTER_FRAME, update ); } private function update( e:Event ):void { // end grow by rnnning out Life if ( _life <= MIN_LIFE ) { // last life growth leaves if ( 0 < _life ) { var nyo_leaves:NyoLeaves = new NyoLeaves( _life, _rotate ); nyo_leaves.x = _branch_point.x; nyo_leaves.y = _branch_point.y; addChild( nyo_leaves ); } removeEventListener( Event.ENTER_FRAME, update ); return; } // cost Life _life -= 1 + Math.floor( Math.random() * LIFE_DEGENERATE_RATE ); // Grow new Branch and cost life var nyo_tree:NyoTree = new NyoTree( _life, _rotate ); nyo_tree.x = _branch_point.x; nyo_tree.y = _branch_point.y; addChild( nyo_tree ); } } class NyoLeaves extends Sprite { private const LEAVES_SIZE_RATE:int = 6; private const BOTTOM_COLOR:uint = 0xffaaaa; private const TOP_COLOR:uint = 0xffffff; public function NyoLeaves( size:int = 0, parent_rotate:int = -180 ) { // adjust size size *= LEAVES_SIZE_RATE; // create curve points var point_b:Point = new Point( 0, 0 ); var point_al:Point = new Point( - size / 2, 0 ); var point_ar:Point = new Point( size / 2, 0 ); var point_t:Point = new Point( 0, size ); // apply Rotation var rotate:int = -60 + parent_rotate + Math.floor( Math.random() * 120 ); var rm:Matrix = new Matrix(); rm.rotate( rotate * Math.PI / 180 ); var p_b:Point = rm.deltaTransformPoint( point_b ); var p_al:Point = rm.deltaTransformPoint( point_al ); var p_ar:Point = rm.deltaTransformPoint( point_ar ); var p_t:Point = rm.deltaTransformPoint( point_t ); // draw var gm:Matrix = new Matrix(); gm.createGradientBox( size * 2, size * 2, 0, - size, - size ); graphics.beginGradientFill( GradientType.RADIAL, [ BOTTOM_COLOR, TOP_COLOR ], [ 1, 0 ], [ 64, 255 ], gm ); graphics.curveTo( p_al.x, p_al.y, p_t.x, p_t.y ); graphics.curveTo( p_ar.x, p_ar.y, p_b.x, p_b.y ); graphics.endFill(); } }
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email