OrangeBamboo
マウスクリックするたび、竹が生えます。100回くらいクリックすると綺麗な絵になる
気がします。大変です。マウスホイールでリセットですが、マウスホイールがない
と大変です。困ってしまいます。
// forked from sat's OrangeBumboo
/*
マウスクリックするたび、竹が生えます。100回くらいクリックすると綺麗な絵になる
気がします。大変です。マウスホイールでリセットですが、マウスホイールがない
と大変です。困ってしまいます。
*/
package
{
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
[SWF(width=465, height=465, frameRate=24, backgroundColor=0xff6633)]
public class Orange extends Sprite
{
public var bambSpace:uint = 6;
public var bambNum:uint;
public var bambBmp:BitmapData;
public var ct:ColorTransform;
public var mt:Matrix;
public function Orange()
{
init();
}
public function reset(e:MouseEvent):void
{
graphics.clear();
bambBmp.dispose();
init();
}
public function genBumb(e:MouseEvent):void
{
bambNum++;
trace(bambNum);
var mX:int = mouseX;
var mY:int = 465;
var gX:int = mouseX;
var gY:int = 0;
for(var i:int = 0; i < 20; i++)
{
var bambLength:uint = 30;
var yokoY:int =0;
bambLength += Math.random() * 14;
mY -= bambSpace;
gY = mY - bambLength;
gX = (mX - 10) + Math.random() * 20;
//trace(mY,gY);
//縦線の描画
for(var j:int = 0; j < 5; j++)
{
var bAlpha:Number = Math.random() + 0.5;
graphics.lineStyle(4,0,bAlpha);
graphics.moveTo(mX + j * 3, mY);
graphics.lineTo(gX + j * 3, gY);
}
//横線の描画
yokoY = mY + bambSpace * 0.5;
graphics.lineStyle(1,0);
graphics.moveTo(mX, yokoY);
graphics.lineTo(mX + 15, yokoY);
//葉っぱの描写
if(Math.random() < 0.4)
{
//左右のどっちに生えるか
var sayuu:uint = Math.floor( Math.random() * 2);
if(sayuu == 0)
{
var gP:Point = new Point(gX - 30, gY -30);
graphics.lineStyle(1,0);
graphics.moveTo(gX, gY);
graphics.curveTo( gX, gY -20 , gP.x, gP.y);
graphics.moveTo(gX, gY);
graphics.curveTo( gX - 10, gY -30 , gP.x, gP.y);
}
if(sayuu == 1)
{
var gP2:Point = new Point(gX + 30 + 15, gY -30);
graphics.lineStyle(1,0);
graphics.moveTo(gX + 15, gY);
graphics.curveTo( gX + 15, gY -20 , gP2.x, gP2.y);
graphics.moveTo(gX + 15, gY);
graphics.curveTo( gX + 10 + 15, gY -30 , gP2.x, gP2.y);
}
}
//mYの位置を更新
mY = gY;
mX = gX;
}
if(bambNum == 5)
{
bambNum = 0;
changeBumb();
}
}
public function changeBumb():void
{
//mt.scale(0.2,0.2);
ct.alphaMultiplier = Math.random();
ct.redOffset = 64;
ct.greenOffset = 9;
bambBmp.draw(stage,mt,ct);
addChild( new Bitmap(bambBmp) );
graphics.clear();
}
public function init():void
{
bambNum = 0;
bambBmp = new BitmapData(465,465,true,0xffffff);
ct = new ColorTransform();
mt = new Matrix();
stage.addEventListener(MouseEvent.MOUSE_DOWN, genBumb);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, reset);
}
}
}