archive-com.com » COM » N » NITOYON.COM

Total: 757

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".
  • Processing の燃えるエフェクトを AS3 に移植した - てっく煮ブログ
    extends Sprite private const WIDTH int 200 private const HEIGHT int 150 public function FireCube stage align TL stage scaleMode noScale scaleX scaleY 2 Create circle var circle Sprite new Sprite circle graphics beginFill 0x808080 circle graphics drawCircle 0 0 10 circle graphics endFill Create buffered image var fire BitmapData new BitmapData WIDTH HEIGHT false 0 var pg BitmapData fire clone var noiseBmd BitmapData new BitmapData WIDTH 1 var bmp Bitmap new Bitmap pg addChild bmp Generate the palette var r Array g Array b Array for var x int 0 x 256 x Hue goes from 0 to 85 red to yellow Saturation is always the maximum 255 Lightness is 0 255 for x 0 128 and 255 for x 128 255 HSVtoRGB x 3 1 Math min x 3 255 0 1 r g b Use ConvolutionFilter to calculate for every pixel var filter ConvolutionFilter new ConvolutionFilter 3 3 0 0 0 16 16 16 0 16 0 65 Prepare points and matrix var matrix Matrix new Matrix var pt0 Point new Point 0 HEIGHT 1 var pt1 Point new Point 0 1 var pt2 Point new Point 0 1 Do loop addEventListener enterFrame function event void Randomize the bottom row of the fire buffer noiseBmd noise Math random 0xffffffff 0 190 7 true fire copyPixels noiseBmd noiseBmd rect pt0 Display circle matrix tx mouseX matrix ty mouseY fire draw circle matrix Add pixel values around current pixel fire applyFilter fire fire rect pt1 filter Output everything to screen using our palette colors pg paletteMap fire fire rect pt2 r g b AS3 does not natively support HSV private function HSVtoRGB h int s Number v Number r Array g Array b Array void if h 60 r push v 255 16 g push v 1 1 h

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/03/26/firecube-as3/ (2016-02-13)
    Open archived version from archive


  • 「50個のポリゴンでモナリザ」を AS3 で - てっく煮ブログ
    bmp width imgHeight bmp height rect inputBmd rect score scoreMax rect width rect height 255 init buffer bestBmd inputBmd clone bestBmd fillRect rect 0x000000 testBmd inputBmd clone testBmd fillRect rect 0x000000 debugBmd inputBmd clone addChild new Bitmap bestBmd x bmp width 10 init data and canvas canvas new Sprite for var i int 0 i POLYGONS i polygons i new Polygon canvas addChild new Sprite drawTest testToBest init ui var tf TextField new TextField tf text click to start tf y bmp height 10 tf scaleX tf scaleY 3 addChild tf stage addEventListener click function event void mutating mutating time mutating new Date null tf text mutating Now Simulating click to start scoreText new TextField scoreText autoSize left scoreText y bmp height 60 scoreText scaleX scoreText scaleY 3 addChild scoreText start timer setInterval update 10 private function update void if mutating return var t Date new Date totalTime t getTime time getTime 1000 time t for var i int 0 i 10 i update1 scoreText text int 1 score scoreMax 10000 100 n mutations candidates n int totalTime 10 10 s private function update1 void var index int Math random POLYGONS var backup Polygon polygons index clone polygons index mutate drawTest var diffBmd BitmapData testBmd compare inputBmd as BitmapData diffBmd applyFilter diffBmd rect pt0 monotoneFilter var testScore uint 0 for var i int 0 i 0x100 i testScore diffBmd threshold diffBmd rect pt0 i i 0xff i if score testScore score testScore testToBest mutations else polygons index backup candidates private function drawTest void canvas graphics clear for var i int 0 i POLYGONS i polygons i draw canvas imgWidth imgHeight testBmd fillRect rect 0x000000 testBmd draw canvas private function testToBest void bestBmd copyPixels testBmd rect pt0 import flash display import flash geom class Polygon private const POINTS int 6 public

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/02/17/polygon-monalisa/ (2016-02-13)
    Open archived version from archive

  • <div id="flashcontent">の中身も… - てっく煮ブログ
    Google Maps API for Flash を前面に押し出した最初のキャンペーンサイトです しっかりと作り込んでいて 地図と Flash の連携も大変面白いです が 詰めが甘かった JavaScript オフで見ると あぎゃー なんじゃこれーと思ってぐぐってみると Flashのフレームワーク Progression3 を始めてみよう 第4回 Progression3でWebサイトを作る 前編 gihyo jp の サンプルサイト が引っかかりました なるほど これをベースに作成したんですね 私は普段 JavaScript オフで生活しているので こういう面白い事例に出会いやすいです JavaScript オフのとき用のページもしっかり作りこんであると好印象ですね Tweet 2009年02月12日 編集履歴 ActionScript 関連する記事 代替テキスト SEO対策 または 代替画像 Common Lisp 仕様書の Evaluation Model を読んでマインドマップにまとめた Common Lisp のマクロが何をやってるか把握する Please enable JavaScript to view the comments powered by Disqus comments powered by Disqus About Profile nitoyon

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/02/12/flashcontent-noscript/ (2016-02-13)
    Open archived version from archive

  • 10分で書いたパーサーを3時間かけて機能を増やした - てっく煮ブログ
    AssignmentExpression AssignmentExpression private function Expression Object var ret Object AssignmentExpression while str charAt pos pos ret AssignmentExpression return ret TODO assignment AssignmentExpression ConditionalExpression private function AssignmentExpression Object return ConditionalExpression ConditionalExpression LogicalORExpression LogicalORExpression AssignmentExpression AssignmentExpression private function ConditionalExpression Object var ret Object LogicalORExpression if str charAt pos var b Boolean Boolean ret var tmp Object pos tmp AssignmentExpression if b ret tmp if str charAt pos throw new Error Conditional Operator no pos tmp AssignmentExpression if b ret tmp return ret LogicalORExpression LogicalANDExpression LogicalANDExpression private function LogicalORExpression Object var ret Object LogicalANDExpression while str substr pos match pos 2 ret LogicalANDExpression return ret LogicalANDExpression BitwiseORExpression BitwiseORExpression private function LogicalANDExpression Object var ret Object BitwiseORExpression while str substr pos 2 pos 2 ret BitwiseORExpression return ret BitwiseORExpression BitwiseANDExpression BitwiseANDExpression private function BitwiseORExpression Object var ret Object BitwiseXORExpression while str substr pos match pos 1 ret int ret int BitwiseXORExpression return ret BitwiseXORExpression BitwiseANDExpression BitwiseANDExpression private function BitwiseXORExpression Object var ret Object BitwiseANDExpression while str substr pos match pos 1 ret int ret int BitwiseANDExpression return ret BitwiseANDExpression EqualityExpression EqualityExpression private function BitwiseANDExpression Object var ret Object EqualityExpression while str substr pos match pos 1 ret int ret int EqualityExpression return ret EqualityExpression RelationalExpression RelationalExpression private function EqualityExpression Object var ret Object RelationalExpression while m str substr pos match switch m 1 case pos 2 ret ret RelationalExpression break case pos 2 ret ret RelationalExpression break case pos 3 ret ret RelationalExpression break case pos 3 ret ret RelationalExpression break return ret RelationalExpression ShiftExpression ShiftExpression private function RelationalExpression Object var ret Object ShiftExpression while m str substr pos match switch m 1 case pos 1 ret ret ShiftExpression break case pos 1 ret ret ShiftExpression break case pos 2 ret ret ShiftExpression break case pos 2 ret ret ShiftExpression break return ret ShiftExpression AdditiveExpression AdditiveExpression private function ShiftExpression Object var ret Object AdditiveExpression while m str substr pos match switch m 1 case pos 2 ret int ret uint AdditiveExpression break case pos 2 ret int ret uint AdditiveExpression break case pos 3 ret uint ret uint AdditiveExpression break return ret AdditiveExpression MultiplicativeExpression MultiplicativeExpression private function AdditiveExpression Object var ret Object MultiplicativeExpression while m str substr pos match switch m 1 case pos ret Number ret Number MultiplicativeExpression break case pos ret Number ret Number MultiplicativeExpression break return ret MultiplicativeExpression UnaryExpression UnaryExpression private function MultiplicativeExpression Object var ret Object UnaryExpression while m str substr pos match switch m 1 case pos ret Number ret Number UnaryExpression break case pos ret Number ret Number UnaryExpression break case pos ret Number ret Number UnaryExpression break return ret UnaryExpression delete void typeof UnaryExpression PostfixExpression private function UnaryExpression Object if m str substr pos match delete void typeof switch m 1 case delete throw new Error not implemented delete case void UnaryExpression return undefined case typeof pos 6 return typeof UnaryExpression case throw new Error not implemented case throw new Error not implemented case pos 1 return Number UnaryExpression case pos 1 return Number UnaryExpression case pos

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/01/29/as3-parser/ (2016-02-13)
    Open archived version from archive

  • 10分で書ける、お手軽パーサーを AS3 で - てっく煮ブログ
    output TextField new TextField output x 10 output y 40 output autoSize left addChild output var input TextField new TextField input border true input x 10 input y 10 input width 200 input height 20 input type input input text 5 1 2 input addEventListener change function event void try output text parser parse input text output textColor 0x000000 catch e Error output text e toString output textColor 0xff0000 input dispatchEvent new Event change addChild input scaleX scaleY 2 class Parser private var pos int private var str String public function parse s String String str s replace g pos 0 return expr toString Expr Term Term private function expr int var ret int term while true switch str charAt pos case pos ret term break case pos ret term break default return ret return 0 never comes here Term Fact Fact private function term int var ret int fact while true switch str charAt pos case pos ret fact break case pos ret fact break default return ret return 0 never comes here Fact Expr Fact number private function fact int var ret int var m Array if m str substr pos match d pos m 1 length return

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/01/28/as3-simple-parser/ (2016-02-13)
    Open archived version from archive

  • ActionScript3 ブロックスコープの ABC - てっく煮ブログ
    foo1 void for var i int 0 i 10 i var a Object new Object 外バージョン function foo2 void var a Object for var i int 0 i 10 i a new Object Flex SDK 3 2 の asc jar でコンパイルして Tamarin 付属の abcdump でバイトコードを眺めてみた 中バージョンではこんな感じになった var undefined void disp id 0 local count 3 max scope 0 max stack 2 code len 33 0 pushnull 1 coerce Object 3 setlocal2 4 pushbyte 0 6 convert i 7 setlocal1 8 jump L1 L2 12 label 13 findpropstrict Object 15 constructprop Object 0 18 coerce Object 20 setlocal2 21 getlocal1 22 increment i 23 convert i 24 setlocal1 L1 25 getlocal1 26 pushbyte 10 28 iflt L2 32 returnvoid いっぱい出てきたが 焦らずにゆっくり見ていこう 最初にローカル変数の準備 まずは冒頭の7行 コメントでバイトコードにほぼ等しい AS3 の該当するコードを補っておいた var a Object null 0 pushnull null をスタックに積む 1 coerce Object スタック1番上を Object にキャスト 3 setlocal2 pop して register 2 に代入 var i int 0 4 pushbyte 0 0 をスタックに積む 6 convert i スタック1番上を int にキャストする 7 setlocal1 pop して register 1 に代入 8 jump L1 L1 に移動 関数の最初ではローカル変数 a と i を準備していることが分かる ここまでのバイトコードは 外バージョン も 中バージョン も同じだった ローカル変数は宣言した場所によらず 関数の冒頭で確保される ようだ for を抜けるチェック 次 L1 の処理を見ていく L1 i 10 25 getlocal1 i register 1 をスタックに積む 26 pushbyte 10 10 をスタックに積む 28 iflt L2 スタック上の2つの値を比較して i が小さければ L2 にジャンプする 32 returnvoid void を返す i 10 である限りは L2 にジャンプし続けるわけですな 実はここも 外バージョンと中バージョンで同じ いよいよ for の中を解析 最後に L2 ここで外と中の違いがでてくる まずは中バージョン var a Object new Object L2 12 label a new Object 13 findpropstrict Object 15 constructprop Object 0 new Object する 18 coerce Object Object にキャストする 20 setlocal2 a register 2 に代入 i 21 getlocal1 i register 1 をスタックに取り出す 22 increment i スタック1番上を 1 加算する 23 convert i スタック1番上を int にキャストする 24 setlocal1 スタック1番上を register 1 に代入 素直な感じ 次は外バージョン a new Object var c new Object 13 findpropstrict Object

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/01/22/block-scope-abc/ (2016-02-13)
    Open archived version from archive

  • Alchemy でのファイル IO - てっく煮ブログ
    log 4 open spath io size return n read only のときは fetch を呼び出す CSystemLocal fetch fetch は次のようになってる private function fetch path String Object var res Object statCache path if res var gf ByteArray gfiles path if gf res pending false size gf length data gf statCache path res return res Alchemy Shell var ns Namespace new Namespace avmshell var file Object ns File snip if forceSync return res size 1

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/01/16/alchemy-file-io/ (2016-02-13)
    Open archived version from archive

  • Alchemy が吐く AS3 ソースを深追いする - てっく煮ブログ
    4 op 0x3c state 2 mstate esp 4 FSM pubrealloc start return asm lbl myAlloc state2 i0 mstate eax mstate esp 8 i1 xasm int push mstate ebp 4 op 0x37 asm push i1 push i0 op 0x3c mstate esp 4 asm push i0 push mstate esp op 0x3c state 3 mstate esp 4 mstate funcs AS3 Ptr return asm lbl myAlloc state3 i0 mstate eax mstate esp 4 mstate eax i0 mstate esp mstate ebp mstate ebp xasm int push mstate esp op 0x37 mstate esp 4 RETL mstate esp 4 mstate gworker caller return asm lbl myAlloc errState throw Invalid state in myAlloc 全体の構成として気になるのは myAlloc 関数がクラスとして実現されていること 次に目に付くのは eax や esp などのプロパティ どうやら AS3 上でレジスタやスタックをエミュレートしているような雰囲気だ では細かく見ていく まずは全体の構成 state で実現するタイムスライス work 関数が関数処理の実体だ work 関数の外側を見てみるとこうなっている public final override function work void asm push state switchjump myAlloc errState myAlloc state0 myAlloc state1 myAlloc state2 myAlloc state3 asm lbl myAlloc state0 state 1 AS3 ArrayValue 関数呼びだし return asm lbl myAlloc state1 state 2 malloc 関数呼びだし return asm lbl myAlloc state2 state 3 AS3 Ptr 関数呼びだし return asm lbl myAlloc state3 myAlloc 関数終了準備 mstate gworker caller return asm lbl myAlloc errState throw Invalid state in myAlloc このように work 関数では もともとの myAlloc 関数の処理がぶつ切りにされている FSM myAlloc というところからも分かるとおり 関数の動作が FSM 有限オートマトン として実現されている work 関数が呼ばれるたびにステートが変化していくイメージだ この work 関数を呼び出しているのが CRunner クラスだ CRunner クラスのメインループをざっと見てみよう public class CRunner implements Debuggee public function startInit void log 2 Static init timer new Timer 1 timer addEventListener flash events TimerEvent TIMER function event TimerEvent void work こんな感じて定期的に work 関数を呼びだすようにしている work 関数は次のように定義されている public function work void if isRunning return try var startTime Number new Date time while true var checkInterval int 1000 while checkInterval 0 try while checkInterval 0 gstate gworker work catch e AlchemyDispatch if new Date time startTime 1000 10 throw new AlchemyYield gstate gworker というのが現在処理中の関数を指すようになってる どうやら 1000ステップごとに時間経過をチェックしていて 10秒以上実行していた場合には AlchemyYield 例外を発生させている AlchemyYield 例外が発生すると work メソッドからは一旦抜けて 画面描画が行われる なお C のソース上で再描画を強制するには flyield メソッドを呼ぶとよい flyield は throw new AlchemyYield という AS3 に変換される このように Alchemy が変換する AS3 は細かくタイムスライスされていて 細かい処理の単位でいつでも中断できるようになっている 将来的にはマルチスレッドをエミュレートできるようになるかもしれない 疑似レジスタ では 関数の最初から見ていこう asm lbl myAlloc state0 asm lbl myAlloc XprivateX BB75 0 F mstate esp 4 asm push mstate ebp push mstate esp op 0x3c mstate ebp mstate esp mstate esp 4 i0 2E str99 mstate esp 12 i1 xasm int push mstate ebp 12 op 0x37 i2 mstate ebp 4 asm push i1 push mstate esp op 0x3c asm push i0 push mstate esp 4 op 0x3c asm push i2 push mstate esp 8 op 0x3c state 1 mstate esp 4 mstate funcs AS3 ArrayValue return この AS3 のコードは 確保した値の初期値を受け取る int v AS3 ArrayValue args IntType v が変換されたものだ なんと長くなるんだ と思うんだけど 1個ずつ見ていけば納得の処理である まずは最初の2行 push ebp mstate esp 4 asm push mstate ebp push mstate esp op 0x3c mov ebp esp mstate ebp mstate esp asm というのが初めて見るが asm push a push b op 0x3c は a の値を int として b のアドレスに代入する という意味だと推測される op 0x3c は load a 32 bit integer from global memory を表す op code のようだ 参考 FlaCC の p17 つまり 1行目は push ebp であり 2行目は mov ebp esp となる これは C で関数呼びだしの際に最初に行うお決まりのあの処理にあたる 呼びだし元の ebp を保存して

    Original URL path: http://tech.nitoyon.com/ja/blog/2009/01/15/alchemy-as-stack/ (2016-02-13)
    Open archived version from archive



  •