なんとかディウスっぽい背景 gyuque forked:22favorite:8lines:179license : All rights reserved modified : 2008-12-22 03:00:04 Embed Tweet package { import flash.display.*; import flash.geom.*; import flash.events.*; [SWF(width="320", height="240", backgroundColor="0x000000", frameRate="30")] public class Nemesis extends Sprite { public static const W:int = 320; public static const H:int = 240; private var mScroll:int = 0; private var mMyPos:Point; private var mBGen:MountainGen = new MountainGen(160); private var mTGen:MountainGen = new MountainGen(160, 1); private var mBGScreen:BitmapData = new BitmapData(W, H, true, 0); private var mBGScreenBmp:Bitmap; private var mBGScreenBmp2:Bitmap; private var mStarbg:StarBG = new StarBG(W, H, 30); function Nemesis() { addChild(mStarbg); mBGScreenBmp = new Bitmap(mBGScreen); addChild(mBGScreenBmp); mBGScreenBmp2 = new Bitmap(mBGScreen); addChild(mBGScreenBmp2); var i:int; mBGen.step(); mTGen.step(); for (i = 0;i < W;i++) { mBGen.step(); mTGen.step(); mBGen.draw(mBGScreen, i, 80); mTGen.draw(mBGScreen, i, 0, false); } addEventListener(Event.ENTER_FRAME, tick); } private var _clrrc:Rectangle = new Rectangle(0, 0, 1, H); private function tick(e:Event):void { var ox:int = mScroll % W; _clrrc.x = ox; mBGScreen.fillRect(_clrrc, 0); mStarbg.tick(); mBGen.step(); mTGen.step(); mStarbg.draw(); mBGen.draw(mBGScreen, ox, 80); mTGen.draw(mBGScreen, ox, 0, false); mBGScreenBmp.x = -ox; mBGScreenBmp2.x = W-ox; mScroll++; } } } class MountainGen { import flash.display.*; private var mPrevBuffer:Array; private var mHeight:int; private var mCount:int = 0; private var tmpBuffer:Array; private var mGenFunc:Function; function MountainGen(h:int, generator:int = 0) { mHeight = h; mGenFunc = generator ? genWav2 : genWav; mPrevBuffer = new Array(h); tmpBuffer = new Array(h); } public function draw(b:BitmapData, x:int, y:int, rev:Boolean = true):void { var i:int; for (i = 0;i < mHeight;i++) { if (tmpBuffer[i]) { var c:int = tmpBuffer[i]; b.setPixel32(x, rev ? (y+mHeight-i) : (y+i), 0xff000000 | (c/3+11) | ((c/5 + 170)<<16) | ((c/2+60) << 8)); } } } public function step():void { var t:Number = Number(mCount) * 0.02; var h:int = mGenFunc(t) * mHeight; var i:int, k:int, m:int; for (i = 0;i < mHeight;i++) { mPrevBuffer[i] = tmpBuffer[i]; } for (i = 0;i < mHeight;i++) { tmpBuffer[i] = (i < h) ? (Math.random()*80 + 80) : 0; if (tmpBuffer[i]) { if (mPrevBuffer[i]) tmpBuffer[i] = (tmpBuffer[i] + mPrevBuffer[i]*7)/8; if (mPrevBuffer[i] == 0 || i == (h-1)) { m = 50; for (k = i;k >= 0 && m > 0;k--, m-=4) { if (m > 33) m--; tmpBuffer[k] += m; m += Math.random()*7; } } if (mPrevBuffer[i+1] && i == (h-1)) { m = -48; for (k = i;k >= 0 && m < 0;k--, m++) { tmpBuffer[k] += m; if (tmpBuffer[k]<1) tmpBuffer[k] = 1; } } } } for (i = 0;i < mHeight;i++) tmpBuffer[i] = (tmpBuffer[i] < 0) ? 0 : (tmpBuffer[i] > 255) ? 255 : tmpBuffer[i]; mCount++; } private static function genWav(t:Number, nest:int = 0):Number { var v:Number = Math.sin(t); v += Math.cos(t*3) * 0.1; v += Math.cos(0.1 + t*10) * 0.02; v *= Math.cos(t*0.1); if (nest < 5) v += genWav(t+1, ++nest); v = v*0.2 + 0.3; return (v<0) ? 0 : (v>1) ? 1 : v; } private static function genWav2(t:Number, nest:int = 0):Number { var v:Number = Math.sin(t); v += Math.cos(t*3) * 0.1; v += Math.cos(0.1 + t*9) * 0.02; v *= Math.cos(0.2 + t*0.15); if (nest < 5) v += genWav2(t+1, ++nest); v = v*0.2 + 0.2; return (v<0) ? 0 : (v>1) ? 1 : v; } } class StarBG extends flash.display.Sprite { import flash.display.*; import flash.geom.Point; private var mWidth:int; private var mHeight:int; private var mStars:Array; private var mStarVs:Array; private var mN:int; function StarBG(w:int, h:int, n:int) { mWidth = w; mHeight = h; mN = n; mStars = new Array(n); mStarVs = new Array(n); for (var i:int = 0;i < n;i++) { mStars[i] = new Point(int( Math.random()*w ), int( Math.random()*h )); mStarVs[i] = Math.random() + 0.2; } } public function tick():void { var n:int = mN; for (var i:int = 0;i < n;i++) { mStars[i].x -= Number(mStarVs[i]); if (mStars[i].x < 0) { mStars[i].x += mWidth; mStars[i].y = int( Math.random()*mHeight ); } } } public function draw():void { var g:Graphics = graphics; var n:int = mN; g.clear(); for (var i:int = 0;i < n;i++) { g.beginFill(0xffffff); g.drawCircle( mStars[i].x, mStars[i].y , 0.4); } } } Code Fullscreen Preview Fullscreen siouxcitizen.. homuncul kuroarizuka mgiulio SnakeGp sugi2000 yasohachi kalevionni : some japanese sidescrolling tunnel Math.cos setPixel32 drawCircle clear graphics addChild fillRect Math.random beginFill addEventListener draw Boolean Math.sin Point Event.ENTER_FRAME Array Sprite Event Bitmap BitmapData sort new page view favorite forked pv15 forked from: なんとかディウスっぽい背景 dimitris.1972g forked:0 favorite:0lines:179 (diff:1) pv29 forked from: なんとかディウスっぽい背景 Night forked:0 favorite:0lines:179 (diff:1) pv35 forked from: なんとかディウスっぽい背景 oreing forked:0 favorite:0lines:179 (diff:1) pv106 forked from: なんとかディウスっぽい背景 Ryohei.Watanabe forked:0 favorite:1lines:179 (diff:1) pv61 forked from: なんとかディウスっぽい背景 gamedevguy12 forked:0 favorite:0lines:179 (diff:1) pv50 forked from: なんとかディウスっぽい背景 human1 forked:0 favorite:0lines:179 (diff:1) pv338 forked from: なんとかディウスっぽい背景 Urfin forked:0 favorite:1lines:179 (diff:3) pv0 forked from: なんとかディウスっぽい背景 Urfin forked:0 favorite:0lines:179 (diff:1) 1 2 3NEXT