flash on 2014-6-24
テクスチャの表示
♥0 |
Line 110 |
Modified 2014-06-24 14:20:18 |
MIT License
archived:2017-03-20 03:18:58
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;//ドットカラー
}
}
}
}
}
}