flash on 2014-6-24

by tepe
テクスチャの表示
♥0 | Line 110 | Modified 2014-06-24 14:20:18 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/tw2T
 */

package {
    import flash.geom.*;
    import flash.display.*;
    import flash.utils.*;
    //テクスチャの表示
    public class FlashTest extends Sprite {
        
        private var bmp:Bitmap;
        public function FlashTest() {
                
            var dat:BitmapData = func();
            bmp = new Bitmap(dat);
            addChild(bmp);
            
            var bmp2:Bitmap = new Bitmap(func2(dat,1*15,0,16,16*3));
            addChild(bmp2);
            bmp2.y = 150;
            bmp2.scaleX = bmp2.scaleY = 3;
            
            bmp.scaleX = bmp.scaleY = 1.8;
        }
        
        //ビットマップ切り出し
        private function func2(res:BitmapData,x:int,y:int,w:int,h:int):BitmapData{
            var dat:BitmapData = new BitmapData(w,h);
            var rect:Rectangle = new Rectangle(x,y,w,h);
            var ar:Vector.<uint> = res.getVector(rect);
            
            for(var i:int=0;i<w;i++){
                for(var j:int=0;j<h;j++){
                    var col:int = ar[i+j*w];
                    dat.setPixel32(i,j,col);
                }

            }

            return dat;
        }

        
        private function func():BitmapData{
            initTexMap();
            var dat:BitmapData = new BitmapData(16*16,16*3,false,0xffffff);
            dat.lock();
            for ( var i:int = 1; i < 16; i++) {//ブロックの種類
                //var br:int = 255 - ((Math.random() * 96) | 0);
                for ( var y:int = 0; y < 16 * 3; y++) {
                    for ( var x:int = 0; x < 16; x++) {
                        var col:int = texmap[x + y * 16 + i * 256 * 3];
                        dat.setPixel32(x+(16*i),y,col);
                    }
                }
            }
            dat.unlock();
            return dat;
            

        }

        
        //テクスチャデータ
        private var texmap: Vector.<int> = new Vector.<int>(16 * 16 * 3 * 16, true);        
        //テクスチャ生成
        private function initTexMap():void {
            for ( var i:int = 1; i < 16; i++) {//ブロックの種類
                var br:int = 255 - ((Math.random() * 96) | 0);
                for ( var y:int = 0; y < 16 * 3; y++) {
                    for ( var x:int = 0; x < 16; x++) {
                        var color:int = 0x966C4A;
                        if (i == 4)color = 0x7F7F7F;
                        
                        if (i != 4 || ((Math.random() * 3) | 0) == 0) {
                            br = 255 - ((Math.random() * 96) | 0);
                        }
                        
                        if ((i == 1 && y < (((x * x * 3 + x * 81) >> 2) & 3) + 18)) {
                            color = 0x6AAA40;
                        }
                        else if ((i == 1 && y < (((x * x * 3 + x * 81) >> 2) & 3) + 19)) {
                            br = br * 2 / 3;
                        }
                        
                        if (i == 7) {//木
                            color = 0x675231;
                            if (x > 0 && x < 15
                                && ((y > 0 && y < 15) || (y > 32 && y < 47))) {
                                color = 0xBC9862;
                                var xd:int = (x - 7);
                                var yd:int = ((y & 15) - 7);
                                if (xd < 0)
                                xd = 1 - xd;
                                if (yd < 0)
                                yd = 1 - yd;
                                if (yd > xd)
                                xd = yd;

                                br = 196 - ((Math.random() * 32) | 0) + xd % 3 * 32;
                            } else if (((Math.random() * 2) | 0) == 0) {
                                br = br * (150 - (x & 1) * 100) / 100;
                            }
                        }

                        if (i == 5) {//レンガ
                            color = 0xB53A15;
                            if ((x + (y >> 2) * 4) % 8 == 0 || y % 4 == 0) {
                                color = 0xBCAFA5;
                            }
                        }
                        if(i == 10){
                            color = 0xeecc99;
                        }

                        
                        if (i == 9) {//水
                            color = 0x4040ff;
                        }
                        var brr:int = br;
                        if (y >= 32)
                        brr /= 2;

                        if (i == 8) {//葉っぱ
                            color = 0x50D937;
                            if (((Math.random() * 2) | 0) == 0) {
                                color = 0;
                                brr = 255;
                            }
                        }

                        var col:int = (((color >> 16) & 0xff) * brr / 255) << 16
                        | (((color >> 8) & 0xff) * brr / 255) << 8
                        | (((color) & 0xff) * brr / 255);
                        texmap[x + y * 16 + i * 256 * 3] = col;//ドットカラー
                    }
                }
            }
        }
    }
}