2014年3月12日水曜日

FlashBuilder(eclipse)で手軽にコードにマーキングできるツール

コードに「あとで消す」とかコメントで書いて後で消さないこととか結構あります。
っていう人にはオススメ。
(eclipseオンリーですが)


FBToolkit
コードに任意の文字列が書いてあればリスト化してくれるツールです。

リポジトリ
http://www.winnemconsulting.com/fbtoolkit/update/
ここからインストールする。

FlashBuilderなら
「ヘルプ」 →「 新規ソフトウェアをインストール」
からインストールできます。

登録した文字列があれば「タスク」ウィンドウにリスト表示されます。


2014年3月6日木曜日

AS3:ActionScript3.0でJSONデコード・エンコード

FlashPlayer11からネイティブでJSONを扱えるようになったので、従来とは異なる方法でエンコード・デコードが行えるようになった。
やり方が2種類あるので、デコード・エンコード部分だけでもごちゃごちゃにならにようにまとめておく。

as3corelibライブラリのjsonデコーダー・エンコーダー
https://code.google.com/p/as3corelib/

com.adobe.serialization.jsonパッケージでは、
JSON.decode(json)    // JSON to Object
JSON.encode(Object) // Object to JSON

defaultパッケージのJSONクラスでは、
JSON.parse(json)    // JOSON to Object
JSON.stringfy(Object)    // Object to JSON


というかんじでできる。

2014年1月21日火曜日

AS3:ColorTransformでディスプレイオブジェクトの色を変更する

ちょっとハマったので、備忘録。


以下のように直接書き換えることはできないっぽい。

var sprite:Sprite = new Sprite();
sprite.transform.colorTransform.color = 0x00FF00;

一度ColorTrandformオブジェクトを作成してからそれを入れるようにするとうまいこといった。

var sprite:Sprite = new Sprite();
var colorTransform:ColorTransform = new ColorTransform();
colorTransform.color = 0x00FF00;
sprite.transform.colorTransform = colorTransform; 

2014年1月8日水曜日

FlashBuilder(eclipse)で"java heap space"

FlashBuilderを触っていて重いモジュールのコーディングを行っている時に、
"java heap space"
という名のエラーが出た。

「重すぎてメモリが足りない」っていうエラー。
これを回避するために方法を探していたら以下のサイトにあった。

Applications/Adobe Flash Builder 4.6/Adobe Flash Builder 4.6.app/Contents/MacOS
にある
"Adobe Flash Builder 4.6.ini"というファイルにメモリの容量を記述する箇所があり、それを編集すれば良いみたい。


-Xms256m // 初期ヒープサイズの指定。空きメモリーの80%くらいがよい。
-Xmx512m // 最大ヒープサイズの指定。初期ヒープサイズと同じがよい。
-XX:MaxPermSize=256m // クラス定義やメソッド、フィールドなどのメタデータが格納されます。
-XX:PermSize=64m

ここを編集すればいいみたいー

2013年12月19日木曜日

Starlingを始める

Starlingとは、stage3Dで2D描画で扱いやすく作られたフレームワークです。
 stage3Dではハードウェアアクセラレーションで高速なGPU描画が可能となります。 

airアプリプロジェクトを作ってみたらはまったからメモ。
webアプリケーションの設定でプロジェクトを作ると、インストールされているFlashPlayerで実行できるんですが、airだとそうじゃないらしい。。。
怒られた。。

そこでair3.9っていう最新っぽいのを試してみる。
http://www.adobe.com/devnet/air/air-sdk-download.html
上記はコンパイラなので、以下のアーカイブを参照したほうがいいかも。
http://helpx.adobe.com/air/kb/archived-air-sdk-version.html

ランタイムバージョンを落としてみた。
けど、通らない…!

普通にwebアプリケーションプロジェクトとして始めようかな。
でもそれだと、ローカルでクロスドメインとか面倒なことでてきそうだな。

2013年12月10日火曜日

テンプレートメソッド、ファクトリーパターン

テンプレートメソッドパターン

大本の汎用的なアルゴリズムを記述したテンプレートクラス



抽象インターフェース
package factory
{ 
 public interface IField
 {
  // 「フィールドを描く」というメソッドを定義
  function drawField():void;
 }
}

実装クラス
package factory
{
 public class FootballField implements IField
 {
  public function FootballField()
  {
  }
  
  public function drawField():void
  {
   trace('Drawing the Football Fieald!');
  }
 }
}

抽象テンプレートクラス
package factory
{
 /**
  *  テンプレートメソッド抽象クラス
  * 
  */ 
 public class BaseGame
 {
  public function BaseGame()
  {
  }
  
  public function initialize():void
  {
   // 無処理
  }
  
  public function createField():IField
  {
   throw new Error('createField:Abstract Methd!');
  }
 }
}

継承クラス
package factory
{
 /**
  *  テンプレートメソッドを継承するクラス
  * 
  */ 
 public class FootballGame extends BaseGame
 {
  public function FootballGame()
  {
   super();
  }
  
  override public function initialize():void
  {
   var field:IField = createField();
   field.drawField();
  }
  
  override public function createField():IField
  {
   return new FootballField();
  }
 }
}


コードだけでは理解するのが難しいので、クラス図を書いたほうがいい。

「テンプレートとなる抽象クラスで処理のアルゴリズムを書き、
抽象インターフェースで各処理の詳細を記述していく」

というイメージかな。



2013年12月9日月曜日

シングルトンパターン

デザインパターンの勉強を始めたので、その勉強録です。

まともに今までデザインパターンを勉強したことがなく、なんとなくソース読んで、似たような仕様で書くっていうのを今まで繰り返してました。
インターンの時にシングルトンを全く意味不明なまま使っていて、結局その時理解せずにインターンを終えてしまった苦い思い出が思い出されます。

今回はこの本に沿って、ActionScriptでデザインパターンを勉強していきたいと思います。(本当はC++とかでやりたい)
ActionScriptでデザインパターンを解説している唯一の本で、丁寧に解説してくれていて理解しやすいと思います。




シングルトンパターン

「クラスのインスタンスを一つしか作らない」ようにするパターンです。
静的なデータとかこういった形で持つ事が多いですかね。

SingletonEnforcerクラス
シングルトンのクラスのみが使用できるSingletonEnforcerクラスをコンストラクタの引数にして、強制的にコンストラクタを外部で呼び出せなくする手法。


package
{
 /**
  *  シングルトンパターンクラス
  * 
  */ 
 public class SingletonClass
 {
  // privateでstaticな変数
  private static var _instance:SingletonClass;
  
  /**
   * constructor 
   * 
   */  
  public function SingletonClass(enforcer:SingletonEnforcer)
  {
  }
  
  /**
   * インスタンス取得メソッド 
   * @return SingletonClass
   * 
   */  
  public static function getInstance():SingletonClass
  {
   if (SingletonClass._instance == null)
   {
    SingletonClass._instance = new SingletonClass(new SingletonEnforcer());
   }
   return SingletonClass._instance;
  }
  
  public function sayHello():void
  {
   trace('Hello World');
  }
 }
}
/**
 * コンストラクタを強制的に呼び出せなくするため
 * 外部からアクセス不可能な空クラスを定義
 * 
 */
class SingletonEnforcer {}