forked from: drawTrianglesをやってみた。
forked from drawTrianglesをやってみた。 (diff: 95)
drawTrianglesの勉強中。 ぐにょぐにょ動かしてみましたー! ちなみに画像はうちのにゃんこです。
♥1 |
Line 153 |
Modified 2011-04-16 01:15:10 |
MIT License
archived:2017-03-20 16:33:41
| (replaced)
ActionScript3 source code
/**
* Copyright saku_K ( http://wonderfl.net/user/saku_K )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iNS8
*/
// forked from sakef's drawTrianglesをやってみた。
/*
drawTrianglesの勉強中。
ぐにょぐにょ動かしてみましたー!
ちなみに画像はうちのにゃんこです。
*/
package
{
import __AS3__.vec.Vector;
import net.wonderfl.utils.SequentialLoader;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.*;
import flash.system.LoaderContext
import flash.system.Security
[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="40")]
public class main extends Sprite
{
private const URL:String="http://assets.wonderfl.net/images/related_images/3/34/34d8/34d838651bde542d82b3a4f1b8675e57cd468bf9";
private var bmpd:BitmapData;
private var imgs:Array=[];
private const NUM_X:int=30;
private const NUM_Y:int=30;
private var vertices:Vector.<Number>;
private var indices:Vector.<int>;
private var uvtData:Vector.<Number>;
private var firstPointX:Vector.<Number>;
private var firstPointY:Vector.<Number>;
private var W:Number;
private var H:Number;
private var shape:Shape;
public function main()
{
var friendArray:Array=[]
var inputBox:TextField=new TextField()
inputBox.type=TextFieldType.INPUT
inputBox.width=200
inputBox.height=20
inputBox.x=10
inputBox.y=10
inputBox.selectable=true;
inputBox.mouseEnabled=true;
inputBox.background=true;
inputBox.backgroundColor=0xFFFFFF
inputBox.border
var format:TextFormat=new TextFormat();
format.color=0x000000
format.size=12;
format.font='_ゴシック';
inputBox.defaultTextFormat=format
inputBox.text='narutohyper'
addChild(inputBox)
//searchButton
var bt:Sprite=new Sprite()
bt.graphics.beginFill(0xCCCCCC,1)
bt.graphics.drawRect(0,0,100,20)
bt.x=220
bt.y=10
var label:TextField=new TextField()
label.autoSize=TextFieldAutoSize.CENTER
label.selectable=false;
label.mouseEnabled=false;
format=new TextFormat();
format.color=0x000000
format.size=12;
format.font='_ゴシック';
label.defaultTextFormat=format
label.text='search'
bt.addChild(label)
addChild(bt)
bt.addEventListener(MouseEvent.CLICK,init)
var guideBox:TextField=new TextField()
guideBox.autoSize=TextFieldAutoSize.LEFT
guideBox.width=400
guideBox.y=40
guideBox.selectable=true;
guideBox.mouseEnabled=true;
format=new TextFormat();
format.color=0xFFFFFF
format.size=12;
format.font='_等幅';
guideBox.defaultTextFormat=format
guideBox.text="TwitterIDを入力して、searchを押してください。\n";
guideBox.appendText(" W↑ E上 \n");
guideBox.appendText("←A S→ D下 \n");
guideBox.appendText(" Z↓ \n");
guideBox.appendText("十字キーでも操作できます。\n");
addChild(guideBox);
var dbg:TextField=new TextField()
//dbg.autoSize=TextFieldAutoSize.LEFT
dbg.width=400
dbg.y=120
dbg.selectable=true;
dbg.mouseEnabled=true;
dbg.multiline=true;
format=new TextFormat();
format.color=0xFFFFFF
format.size=12;
format.font='_ゴシック';
dbg.defaultTextFormat=format
addChild(dbg);
// 画像のロード
SequentialLoader.loadImages([URL], imgs, onLoaded);
}
private function onLoaded():void
{
// 画像の読み込み
var ldr:Loader=imgs.pop();
bmpd=new BitmapData(ldr.width, ldr.height);
bmpd.draw(ldr);
W=bmpd.width;
H=bmpd.height;
shape=addChild(new Shape()) as Shape;
shape.x=(465 - bmpd.width) / 2;
shape.y=(465 - bmpd.height) / 2;
uvtData=new Vector.<Number>();
vertices=new Vector.<Number>();
indices=new Vector.<int>();
firstPointX=new Vector.<Number>();
firstPointY=new Vector.<Number>();
// 初期の座標を計算
for (var i:int=0; i < NUM_X; i++)
{
for (var j:int=0; j < NUM_X; j++)
{
uvtData.push(j / (NUM_X - 1), i / (NUM_Y - 1));
vertices.push(W * j / (NUM_X - 1), H * i / (NUM_Y - 1));
firstPointX.push(W * j / (NUM_X - 1));
firstPointY.push(H * i / (NUM_Y - 1));
if (i != (NUM_Y - 1) && j != (NUM_X - 1))
{
indices.push(NUM_X * i + j, NUM_X * i + j + 1, NUM_X * (i + 1) + j);
indices.push(NUM_X * i + j + 1, NUM_X * (i + 1) + j, NUM_X * (i + 1) + j + 1);
}
}
}
addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e:Event):void
{
// 座標の計算
for (var i:int=0; i < NUM_X * NUM_Y; i++)
{
var theta:Number=Math.atan2(vertices[i * 2 + 1] - shape.mouseY, vertices[i * 2] - shape.mouseX);
var d:Number=300 / Math.sqrt(Math.pow(shape.mouseX - vertices[i * 2], 2) + Math.pow(shape.mouseY - vertices[i * 2 + 1], 2));
vertices[i * 2]+=d * Math.cos(theta) + (firstPointX[i] - vertices[i * 2]) * 0.1;
vertices[i * 2 + 1]+=d * Math.sin(theta) + (firstPointY[i] - vertices[i * 2 + 1]) * 0.1;
}
// draw!
shape.graphics.clear();
shape.graphics.beginBitmapFill(bmpd);
shape.graphics.drawTriangles(vertices, indices, uvtData);
shape.graphics.endFill();
}
}
}