PixelText variation (2)
2007/09/28 22:35 - tweener
PixelText by Tweener の連載第6回で予告しましたが、このバリエーションの解説によって明らかにされるのが、Pixelize クラスのメソッド createPosition の引数 scl です。
scl という変数は一体何者なのか!?
まぁ、そんなたいしたもんじゃないんですが、その前に事務連絡。
Pixelize.createPosition に間違いがありました。
Pixelize.createPosition は第2、第3引数でステージの幅と高を参照していました。
これはピクセルによって構成される文字列をステージ上にセンタリングするために必要と書いてありますが、すいません、大嘘です。
第2、第3引数は createPosition メソッド内で参照されていません。
以降、このシリーズでは、以下の点を修正した as ファイルに則って説明します。
修正点1 Pixelize.as を修正
public static function createPositions( dispStr : String , // 表示文字列 scl : uint = 1 // セルの1辺の長さ(ピクセル単位) ):Array { // 引数処理 scale = scl; // ピクセル化する文字列 var aqLetter:AqLetter = new AqLetter( null , { font:"_sans",size:16 } ); aqLetter.text = dispStr; …… ……
上記で説明したとおり、余計な引数を削除しました。これが間違いを正した部分。
また、AqLetter を生成する部分は、以前のソースは引数が空でしたが、今回は引数が指定されています。 PixelText の原型では指定しなくてもまったく問題ありません。
これがバリエーションの肝の一つですが、解説は後ほど。
修正点2 Main.as を修正
<クラスプロパティ> private var scale : uint = 1; // セルの1辺の長さ <init メソッド内の一部分> positions = new Array(); for ( var i:int=0; i<len; i++ ) { positions[i] = Pixelize.createPositions( strs[i] , scale ); }
Pixelize.as の修正に伴い、Main.as では Pixelize.createPositions をコールしている部分を修正しました。これが間違いを正した部分。
また、以前の Main.as で Pixelize.createPositions をコールした際は、第4引数(繰り返しますが、 Pixelize.createPositions の修正により今回は第2引数になっています)に直接、数値 "1" を指定していましたが、判読性を高めるためにクラスプロパティとしました。
これもバリエーションの肝になります。
- 修正済みの PixelText ソース( 12.4 KB )
話を元に戻します。
前回提示した、微妙に見かけが違う、でも中身は全く同じ4つのサンプルの差異はなにゆえ発生するのか。
この差異は、上記で「このシリーズの肝だ」と述べた2つの変数、1つの数値型変数と1つのオブジェクト型変数により発生します。
オブジェクト型変数は1つの数値型変数と1つの文字列型変数のペアになっていますので、都合、2つの数値型変数と1つの文字列型変数の3つの変数の組み合わせにより発生します。
- Main.as のクラスプロパティ scale:uint
- Pixelize.as の createPositions メソッド内、new AqLetter() の第2引数であるオブジェクト { font:String , size:uint }
具体的にどこをどう弄るとどうなるのか、という説明は次回以降で。