僕は京都に住んでいます。
ほら、京都から大阪ってだいぶ遠いじゃないですか。
僕はペーペーなのでそれほど稼いでいるわけでもなくて、しかも稼いだら稼いだで嫁に搾取され、月々のお小遣いはなんてもう雀の涙・・・。増税反対。
そんな中、先日、大阪の勉強会:大阪てら子 27 「3Dしてみよう+美味しい秋の味覚大収穫祭」に行ってきたんですよ。なけなしのお金で。お金はかかるけど、勉強会で知識を得て、仕事に活かして、結果としてもっと稼ごう、そしたらいつも苦労かけている妻を喜ばせれるんじゃないか、そういう魂胆で。
でね、片道400円。往復だと800円。さらに加えて懇親会。
実をいうと、これって我が家にしたらものすご~く大金なんですね。もう、盆と正月がいっぺんに来たっていうか。ここでそのお金使っちゃうとクリスマス、っつーか越冬にも支障をきたすなってレベル。嫁、ごめんな。今だから言える。本当にすまん。
な、なのに、
http://saqoosha.net/2009/11/01/1782/
・Parameter クラス便利。
・もともとは popforge 内にあったやつ。こんなんにつかってたり。
・改良して SharedObject で値を保存できるようにしたり。
・わりと人気あるクラス。
・社内でたまに見かける。
・こないだ @naggg のひとがさらに改良してつかってた。
・公開してつったら拒否られたけど。
という汚名を着せられましてね・・・orz
もう本当に悔しくて悔しくて。
その日から夜は眠れず、涙で枕は濡れ、声は枯れ果て、激太り・激痩せの繰り返し。
残ったのは大阪に行くために無理して作った借金だけ。
今じゃ借金の取立に追われる毎日。
息をじっと潜め、居留守でやり過ごすことから始まる、憂鬱な朝。
周囲の目線を気にし疲弊し続ける体と心。
その心の隙間を埋めるための、酒、酒、酒。
気がつけば、蛇口をひねろうが水は出てこない。
つかないテレビ、通っていない電気。
電気がなければパソコンなんてただの壷。
パソコンなければ、まったく価値のない俺。俺。俺。俺。
ただただ、見えない明日。
そう、そして、それは昨晩。
机の上に離婚届。かつてそこにいた女(ひと)はもういない。
「わたし、ソースコードの公開を拒否するような器の小さい人とは、もうこれ以上いっしょにいたくないの」、それが彼女の最後の言葉。さようなら、僕らの幸せだった一年間。
ち、
畜生!
畜生っ!!
畜生っ!!!
だったらクラス公開してやんぜビッチめ!
なんならポコ○ン晒すぞボケどもが!!
「裸になって何が悪い」、そう先輩は言ったんだ!
うおおおおおおおおおおおおおおおおおおぉぉぉぉぉぉぉぉ!!!!!!!
・
・
・
・
ふぅ~。
と、まぁ、いきさつは少し冗談ですけど、せっかくなのでクラスを公開してみます。
んん?AS3のクラス晒すのって初めてだったりするのかな?
あー、無駄にイントロ長くなったなぁ。ソースとかの話、続きます。
使い方・みどころ
はい、サンプルのダウンロード。APIはここのASDocで。
サンプルのコードはこんなカンジ。
import jp.naggg.controls.ParameterController;
// 幅の拡大縮小を 0.5 ~ 3 で連続した値で設定
var controller1_mc = new ParameterController("scaleX", 0.1, 0.5, 3, 0, controller1ChangeHandler);
function controller1ChangeHandler(evt:Event):void{
content_mc.scaleX = controller1_mc.value;
}
// 高さの拡大縮小を 0.5 ~ 3 で、0.5 単位の値で設定
var controller2_mc = new ParameterController("scaleY", 2, 0.5, 3, 0.5);
controller2_mc.addEventListener(Event.CHANGE, controller2ChangeHandler);
function controller2ChangeHandler(evt:Event):void{
content_mc.scaleY = controller2_mc.value;
}
// 角度を30度単位で設定、匿名関数をイベントハンドラに
var controller3_mc = new ParameterController("rotation", 0, -180, 180, 30, function(evt:Event){
content_mc.rotation = controller3_mc.value;
});
// 一括配置
ParameterController.alignInstances(this, [
controller1_mc, 100, 500,
controller2_mc, 100, 525,
controller3_mc, 100, 550
]);
// -50 を指定しても、丸め込まれる
controller3_mc.value = -50;
trace(controller3_mc); // -60
// 連続なプロパティであらばトゥイーン可能
addEventListener(Event.ENTER_FRAME, function(evt:Event):void{
controller1_mc.value += (3 - controller1_mc.value) * 0.1;
if(Math.abs(3 - controller1_mc.value) < 0.02){
evt.target.removeEventListener(evt.type, arguments.callee);
controller1_mc.value = 3;
}
});
こういった感じで、対応パラメータとその範囲・Event.CHANGE のハンドラでインスタンス作ります。
ステージ配置は、ParameterCntroller.alignInstances() を使って一括配置すると便利。
上記ソースの通り、イベントハンドラはいくつかの設定が可能。
さらに、使いやすさも少し向上させていて、矢印キーの対応やタブ順などにも対応しています。
問題点は数値の精度が甘くなるときがあることくらい。
まぁでもモック用のクラスなので気にしない気にしない。
設計思想とか
もともと、さくーしゃさんの ParameterSlider を使ってたんですが、いろいろ馴染めない部分も多くて。
- 使いやすさを向上させて生産性を上げたい
- そもそも使うライブラリを用意するのが手間なのでクラス数は少なめがいい
- モック用なのでコードは手短に記述したい
- だけど、場合によってはイベントも欲しい(複雑なロジックとか)
- できれば fl コンポーネントちっくなAPIにしたい
と、気づいたら自作してました。
たしかに、de.popforge.parameter.Parameter は凄くて、使おうか悩ましいところなんですけどね。
逆に、de.popforge.parameter.Parameter を使ってないため、対象プロパティに外部からアクセスされた場合に同期ができなかったりします。ここは注意かも。
あ、あ、あ、さくーしゃさんからはデザインだけを拝借。あれ、凄くいいです。
デザイン盗用が怒られたらたぶん直しますですw
最後に、ActionScriptってこういうコンポーネント作るのクソ大変だけど、でも、習得できる内容は圧倒的に多いですよねぇ。たたきあげられますよねぇ。
僕みたいな車輪の再開発が大好きな人にはたまらんw(ホントはしたくないけど)

Send Your Comment