| 36 | | |
|---|
| 37 | | /** |
|---|
| 38 | | * 炎を表現します。 |
|---|
| 39 | | * @param xPos X座標 |
|---|
| 40 | | * @param yPos Y座標 |
|---|
| 41 | | * @param fireWidth 炎の幅 |
|---|
| 42 | | * @param fireHeight 炎の高さ |
|---|
| 43 | | * @param fireColorIn 炎の内側部分の色 |
|---|
| 44 | | * @param fireColorOut 炎の外側部分の色 |
|---|
| 45 | | */ |
|---|
| 46 | | public function TeraFire(xPos:Number = 0, |
|---|
| 47 | | yPos:Number = 0, |
|---|
| 48 | | fireWidth:Number = 30, |
|---|
| 49 | | fireHeight:Number = 90, |
|---|
| 50 | | fireColorIn:uint = 0xFFCC00, |
|---|
| 51 | | fireColorOut:uint = 0xE22D09){ |
|---|
| | 35 | public function TeraFire(xPos:Number=0, yPos:Number=0, fireWidth:Number=30, fireHeight:Number=90){ |
|---|
| | 36 | fireW = fireWidth; |
|---|
| | 37 | fireH = fireHeight; |
|---|
| | 38 | phaseRateX = 0; |
|---|
| | 39 | phaseRateY = 5; |
|---|
| | 40 | var matrix:Matrix = new Matrix(); |
|---|
| | 41 | matrix.createGradientBox(fireW,fireH,Math.PI/2,-fireW/2,-fireH*(focalPointRatio+1)/2); |
|---|
| | 42 | var colors:Array = [fireColerIn, fireColerOut, fireColerOut]; |
|---|
| | 43 | var alphas:Array = [1,1,0]; |
|---|
| | 44 | var ratios:Array = [30, 100, 220]; |
|---|
| | 45 | |
|---|
| 54 | | phaseRateX = 0; |
|---|
| 55 | | phaseRateY = 5; |
|---|
| 56 | | this.changeFire(fireWidth, fireHeight, fireColorIn, fireColorOut); |
|---|
| | 48 | //炎本体 |
|---|
| | 49 | ball.graphics.beginGradientFill(GradientType.RADIAL,colors, alphas, ratios, matrix,"pad","rgb",focalPointRatio); |
|---|
| | 50 | ball.graphics.drawEllipse(-fireW/2,-fireH*(focalPointRatio+1)/2,fireW,fireH); |
|---|
| | 51 | ball.graphics.endFill(); |
|---|
| | 52 | //余白確保用透明矩形 |
|---|
| | 53 | ball.graphics.beginFill(0x000000,0); |
|---|
| | 54 | ball.graphics.drawRect(-fireW/2,0,fireW+margin,1); |
|---|
| | 55 | ball.graphics.endFill(); |
|---|
| 62 | | //ゆらぎは、他のSprite等にaddChildされた時のみ行うようにする |
|---|
| 63 | | addEventListener(Event.ADDED, function(e:Event):void { |
|---|
| 64 | | addEventListener(Event.ENTER_FRAME,loop); |
|---|
| 65 | | }); |
|---|
| 66 | | addEventListener(Event.REMOVED, function(e:Event):void { |
|---|
| 67 | | removeEventListener(Event.ENTER_FRAME, loop); |
|---|
| 68 | | }); |
|---|
| | 62 | //ゆらぎ用のBitmap(ステージに貼付ける必要はないのでBitmapに貼る必要はない) |
|---|
| | 63 | displaceImage = new BitmapData(fireW+margin,fireH,false,0xFFFFFFFF); |
|---|
| | 64 | //火の芯付近の揺らぎを抑える用のグラデーション |
|---|
| | 65 | var matrix2:Matrix = new Matrix(); |
|---|
| | 66 | matrix2.createGradientBox(fireW+margin,fireH,Math.PI/2,0,0); |
|---|
| | 67 | var gradient_mc:Sprite = new Sprite; |
|---|
| | 68 | gradient_mc.graphics.beginGradientFill(GradientType.LINEAR,[0x666666,0x666666], [0,1], [120,220], matrix2); |
|---|
| | 69 | gradient_mc.graphics.drawRect(0,0,fireW+margin,fireH);//drawのターゲットなので生成位置にこだわる必要はない。 |
|---|
| | 70 | gradient_mc.graphics.endFill(); |
|---|
| | 71 | gradientImage = new BitmapData(fireW+margin,fireH,true,0x00FFFFFF); |
|---|
| | 72 | gradientImage.draw(gradient_mc);//gradient_mcを消す必要は? |
|---|
| | 73 | //同サイズの炎の揺らぎをランダム化 |
|---|
| | 74 | rdm = Math.floor(Math.random()*10); |
|---|
| | 75 | |
|---|
| 93 | | |
|---|
| 94 | | /** |
|---|
| 95 | | * 炎の大きさと色を変更する |
|---|
| 96 | | * @param fireWidth 炎の幅 |
|---|
| 97 | | * @param fireHeight 炎の高さ |
|---|
| 98 | | * @param fireColorIn 炎の内側部分の色 |
|---|
| 99 | | * @param fireColorOut 炎の外側部分の色 |
|---|
| 100 | | */ |
|---|
| 101 | | public function changeFire(fireWidth:Number = 30, |
|---|
| 102 | | fireHeight:Number = 90, |
|---|
| 103 | | fireColorIn:uint = 0xFFCC00, |
|---|
| 104 | | fireColorOut:uint = 0xE22D09):void { |
|---|
| 105 | | fireW = fireWidth; |
|---|
| 106 | | fireH = fireHeight; |
|---|
| 107 | | var matrix:Matrix = new Matrix(); |
|---|
| 108 | | matrix.createGradientBox(fireW,fireH,Math.PI/2,-fireW/2,-fireH*(focalPointRatio+1)/2); |
|---|
| 109 | | var colors:Array = [fireColorIn, fireColorOut, fireColorOut]; |
|---|
| 110 | | var alphas:Array = [1,1,0]; |
|---|
| 111 | | var ratios:Array = [30, 100, 220]; |
|---|
| 112 | | |
|---|
| 113 | | ball.graphics.clear(); |
|---|
| 114 | | ball.graphics.beginGradientFill(GradientType.RADIAL,colors, alphas, ratios, matrix,"pad","rgb",focalPointRatio); |
|---|
| 115 | | ball.graphics.drawEllipse(-fireW/2,-fireH*(focalPointRatio+1)/2,fireW,fireH); |
|---|
| 116 | | ball.graphics.endFill(); |
|---|
| 117 | | //余白確保用透明矩形 |
|---|
| 118 | | ball.graphics.beginFill(0x000000,0); |
|---|
| 119 | | ball.graphics.drawRect(-fireW/2,0,fireW+margin,1); |
|---|
| 120 | | ball.graphics.endFill(); |
|---|
| 121 | | |
|---|
| 122 | | //ゆらぎ用のBitmap(ステージに貼付ける必要はないのでBitmapに貼る必要はない) |
|---|
| 123 | | displaceImage = new BitmapData(fireW+margin,fireH,false,0xFFFFFFFF); |
|---|
| 124 | | //火の芯付近の揺らぎを抑える用のグラデーション |
|---|
| 125 | | var matrix2:Matrix = new Matrix(); |
|---|
| 126 | | matrix2.createGradientBox(fireW+margin,fireH,Math.PI/2,0,0); |
|---|
| 127 | | var gradient_mc:Sprite = new Sprite; |
|---|
| 128 | | gradient_mc.graphics.beginGradientFill(GradientType.LINEAR,[0x666666,0x666666], [0,1], [120,220], matrix2); |
|---|
| 129 | | gradient_mc.graphics.drawRect(0,0,fireW+margin,fireH);//drawのターゲットなので生成位置にこだわる必要はない。 |
|---|
| 130 | | gradient_mc.graphics.endFill(); |
|---|
| 131 | | gradientImage = new BitmapData(fireW+margin,fireH,true,0x00FFFFFF); |
|---|
| 132 | | gradientImage.draw(gradient_mc);//gradient_mcを消す必要は? |
|---|
| 133 | | //同サイズの炎の揺らぎをランダム化 |
|---|
| 134 | | rdm = Math.floor(Math.random()*10); |
|---|
| 135 | | } |
|---|