こっそりトップページ更新
- 2010年 4月 13日
- コメントを書く
こっそりとトップページを更新しました。
前のは無駄に Tweensy とか使ってあったり、更にはなぜか Tweener も併用していたというよく分からん構成になっていたわけですが、いい加減書きなおそうと一念発起した次第です。トローンとした感じはうまくできたかなーと思います。ただ満足できてない部分もあるので、今後もバージョンアップして行こうと思います。
ソースはこちら
カテゴリー : Actionscript 3.0
こっそりとトップページを更新しました。
前のは無駄に Tweensy とか使ってあったり、更にはなぜか Tweener も併用していたというよく分からん構成になっていたわけですが、いい加減書きなおそうと一念発起した次第です。トローンとした感じはうまくできたかなーと思います。ただ満足できてない部分もあるので、今後もバージョンアップして行こうと思います。
ソースはこちら
初スパークしました!
ListURLLoader
複数のテキストデータを一度に読み込んで配列で返すクラスです。
ちなみに2次元配列版もあるけど、用途が限られ過ぎますよね・・・。
将来的にはマルチな Loader を目指します。
フォントを埋め込む必要がある案件で、パブリッシュの度にフォント埋め込み処理を行っていては効率が悪いです。そこでどうにかしてフォントを外部から読むことができないかなと調べてみました。
private var _fontCollection:CastLoader;
private var _singleton:Singleton;
public function IndexScene() {
_singleton = Singleton.getInstance();
}
protected override function _onLoad():void {
//font
_fontCollection = new CastLoader();
var _loaderContext:LoaderContext = new LoaderContext();
_loaderContext.applicationDomain = ApplicationDomain.currentDomain;
_fontCollection.load(new URLRequest("fontCollection.swf"), _loaderContext);
_fontCollection.onCastLoadComplete = function():void {
var _className = "リンケージで設定した時の名前";
var _loadedFont:Font = new Font();
var LoadedFontClass:Class = ApplicationDomain.currentDomain.getDefinition(_className) as Class;
Font.registerFont(LoadedFontClass);
_loadedFont = new LoadedFontClass();
// 読み込んだフォントデータを Singleton へ
_singleton.embedFontData = _loadedFont;
}
}
package {
import flash.text.Font;
/**
* Singleton
*/
public class Singleton {
/**
* own
*/
private static var _singleton:Singleton;
/**
* font
*/
private var _embedFontData:Font;
public function get embedFontData():Font { return _embedFontData; }
public function set embedFontData(value:Font):void {
_embedFontData = value;
}
/**
* constructor
*/
public function Singleton(observer:SingletonObserver) {
if (observer == null) {
throw new ArgumentError("public construction not allowed. use getInstance() method.");
}
}
public static function getInstance():Singleton {
if (_singleton == null) {
_singleton = new Singleton(new SingletonObserver());
}
return _singleton;
}
}
}
class SingletonObserver {
public function SingletonObserver() { }
}
var _embedFontData:Font = Singleton.getInstance().embedFontData; var _tf:TextField = new TextField(); var _format:TextFormat = new TextFormat(_embedFontData.fontName); _tf.embedFonts = true; _tf.defaultTextFormat = _format; _tf.text = "foobar"; addChild(_tf);
AS3 用の Singleton クラス書いてみた。
変数の受渡しとか置き場所とか困った時はこれで間違いなし。
■Singleton
package {
/**
* Singleton
*/
public class Singleton {
private static var _singleton:Singleton;
private var _foo:String = "foo";
/**
* constructor (外から new できないようにする)
*/
public function Singleton(observer:SingletonObserver) {
if (observer == null) {
throw new ArgumentError("public construction not allowed. use getInstance() method.");
}
}
// こいつから Singleton を取得する
public static function getInstance():Singleton {
if (_singleton == null) {
_singleton = new Singleton(new SingletonObserver());
}
return _singleton;
}
public function get foo():String { return _foo; }
public function set foo(value:String):void {
_foo = value;
}
}
}
// Singleton クラスからしかアクセスできないクラス
class SingletonObserver {
public function SingletonObserver() { }
}
var singleton:Singleton = Singleton.getInstance(); trace(singleton.foo); trace(singleton.foo = "aaa"); var singleton2:Singleton = Singleton.getInstance(); trace(singleton2.foo); // 出力結果 foo aaa aaa
以前書いた FizzBuzz 問題 が圧縮されてました(笑)
Wonderfl
128 文字ってすごいなー。
数値でブール値が取れるってのは盲点でした。
【おまけ】
■残像練習
dispatchEvent でむっちゃハマりました。
親クラスで、外部クラスのイベントを発行してくれるメソッド呼び出しても全然反応してくれませんでした。
原因特定できたので備忘録。
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
public class FlashTest extends Sprite {
private var _tf:TextField = new TextField();
private var _foobar:FooBar = new FooBar();
public function FlashTest() {
addChild(_tf);
//イベント登録の前に呼び出すとリスナーが効かない
//_foobar.hogehoge("hoge");
_foobar.addEventListener("piyo", _piyo);
_tf.appendText("piyo : " + _foobar.willTrigger("piyo") + "\n");
//イベント登録後に呼び出すと効く
_foobar.hogehoge("hoge");
_tf.appendText("piyo : " + _foobar.willTrigger("piyo") + "\n");
}
private function _piyo(e:Event):void{
e.target.removeEventListener("piyo", _piyo);
_tf.appendText("おしまい\n");
}
}
}
import flash.events.Event;
import flash.events.EventDispatcher;
class FooBar extends EventDispatcher{
public function FooBar(){
}
public function hogehoge(_value:String):void{
if(_value == "hoge") {
dispatchEvent(new Event("piyo"));
}
}
}
こんなのあったのでやってみる。
[ルール]
1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。
では開始!
■まずは1から100までプリント
for(var i:uint = 1; i<=100; i++){
trace(i);
}
for (var i:uint = 1; i <= 100; i++) {
if(i % 3 == 0 && i % 5 == 0){
trace("FizzBuzz");
}else if(i % 3 == 0){
trace("Fizz");
}else if(i % 5 == 0){
race("Buzz");
}else {
trace(i);
}
}
for (var i:uint = 1; i <= 100; i++) {
i % 3== 0 && i % 5 == 0 ? trace("FizzBuzz") :
i % 3 == 0 ? trace("Fizz") :
i % 5 == 0 ? trace("Buzz") :
trace(i);
}
探したけどなかなか見当たらなかったのでメモ。
infoWindowをオリジナルのものにしたいという時の話。
Flashのライブラリに表示させたいinfoWindowのmc作る。
その中に閉じるボタン(今回はclose_btn)を置いておく。
そしてリンケージでCustomInfoWindowとする。
んでマーカーのクリックイベント等に以下を記述。
var ciw:CustomInfoWindow = new CustomInfoWindow();
var options:InfoWindowOptions = new InfoWindowOptions({
hasShadow: true,
customContent: ciw,
customCloseRect: new Rectangle(ciw.close_btn.x, ciw.close_btn.y, ciw.close_btn.width, ciw.close_btn.height)
});
//インフォウィンドウ表示
{マーカー}.openInfoWindow(options);