[AS]BetweenAS3でMovieClipのタイムラインのフレームをトゥイーンさせる

ここ最近は、Tweener絶ちをして、BetweenAS3マンセーな感じです。
で、Tweenerみたいにむービークリップのタイムラインのトゥイーンってできるのかなと思い軽くググってもサンプルでてこなかったので、Twitterで呟いてみたらできますよと教えてもらいましたー、
さすがー、すげー

トゥイーン対象がMovieClipの場合は、_frameで操作できるとのこと。
Tweenerと同じ感覚で使えますね。
こんな感じです。

import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.easing.*;
import org.libspark.betweenas3.tweens.ITween;

//_mcはタイムラインを持ったMovieClipでステージにおいてあるインスタンス名
BetweenAS3.to(_mc , {_frame:_mc.totalFrames}, 2, Expo.easeOut).play();

[iP]C言語のポインタについて

Objective-Cの準備としてのC言語勉強中。
ポインタのお作法がこんがらがるのでメモしとく。

まず例文から
(のつもりがそのまま注釈も書いちゃった)

//整数型の変数:numberの定義
int number = 100;

//(numberを操作するための)ポインタ変数:pointerの定義
int *pointer;
//*pointerではなく、pointerがポインタ変数
//(*は宣言時の型的な役割→「int *」が型らしい)
//なので、↓でもOK(こう書いた方がわかりやすいかも)
int* pointer;
//intは、扱う変数の型
//(この例ではnumberの型と同じとする)

//ポインタ変数には、変数のアドレスを渡す。
//変数の頭に&;を加えることで、変数のアドレスを意味する
pointer  = &number;

//ポインタ変数を使って、変数numberを操作するには
*pointer = 200;
//*をつけると、そのアドレス対象にアクセスできる
//(この場合は*pointer == numberという感じらしい)

printf( %d\n, number);//出力:200

[iP]Objective-Cの文法メモ(というか、C言語の文法)

Objective-CはC言語の拡張言語なので、C言語の文法も理解してないと読めない。
たとえるなら最先端のギャル語だけ覚えても満足に会話はできないということ。

変数の中身の値の出力周りがASと違ってて、よくこんがらがるのでまとめ。

ASで書くところのこんな文章

var a:int = 100;
var b:Number = 1.2345;
var c:String = "hoge";
trace("a:"+a);//出力:a:100
trace("b:"+b);//出力:b:1.2345
trace("c:"+c);//出力:c:hoge

c言語でかくとこんな感じ

int a = 100;
float b = 1.2345;
char c = "h";
printf("a:%d\n",a);//出力:a:100
printf("b:%f\n",b);//出力:b:1.2345
printf("c:%c\n",c);//出力:c:h

%なんちゃら、という部分にカンマ以降の変数の値が代入されるということらしい。
(\nは改行という意味)
%d:整数(10進数)
%f:少数
%c:文字(一文字)
他にも
%e:指数形式
%E:指数形式(アルファベットが大文字 )
%o:8進数
%x:16進数
%X:16進数(アルファベットが大文字)
%i:%dと同じ
%u:符号なし(10進数)
%g:汎用的なもの(オールマイティ的な?)
%G:汎用的なもの(アルファベットが大文字)
%s:文字列
など

これらをprintfの変換指定子というらしい。

他にも、
%p:メモリのアドレスを取得
%n:よくわかんないけど文字の数を取得できる
%4d:dは整数で、その前の4はフィールド幅、4文字分の領域を確保できる。(右端そろえになる)
%*d:*は変数で指定できるフィールド幅
%.4d:.と数字で精度を指定(数値の桁数的なもの)

そのほか詳しくは↓を読む。
C言語入門講座 3.printfを使いこなそう

[iP]Objective-Cの文法メモ(アウトレット/アクション)

続けてメモ

Objective-Cのアウトレットとアクションという概念。

・アウトレット
FlashでいうところのステージにあるMcにインスタンス名をつけるような行為。
(ステージ上のインスタンスを自動宣言のチェックをOFFにした状態が近い)

・アクション
Flashでいうところのイベントリスナーの関数
AS同様で戻り値はなし(多分)

※2010.02.23.15.06追記
ステージにおいてるもの全てにアウトレットを設定する必要はない。
スクリプトでコントロールする必要があるものだけに設定。
(FLASHでインスタンス名をつけないオブジェクトがあってもいいのと一緒)
ただしFlashでボタンを作る場合はインスタンス名をつけないとASで制御できないけど、こちらは、ボタンにアウトレットを定義せずとも、InterfaceBuilderというものでオブジェクトをアクションと直接緋付けることが可能。
(このあたりが混乱しやすい)

[iP]Objective-Cの文法メモ(ActionScript3.0との差異)

基本は↓にまとまっているのでそこをみる。
イナヅマtvログ:Actionscript思考回路をObjective-C変換 – 超初級

おさらい。
まずObjective-Cは宣言部と実装部に分かれてる。
AS3でいうと、Interfaceで宣言して、Classで実装するみたいなもんかな。
というわけで、Objective-Cは宣言部と実装部を書きます。
(ほんとは宣言部と実装部でファイルをわけるのがお作法)

★クラス定義

//AS3
//クラス:MyClass、スーパークラス:MySuperClass
public class MyClass extends MySuperClass implements MyInterface {};
//※継承はextendsでつなぐ
//※インターフェースはimplementsでつなぐ
//Objective-C
//クラス:MyClass、スーパークラス:MySuperClass
//宣言部
@interface MyClass : MySuperClass<MyInterface> {};
//実装部
@implementation MyClass
//※継承は:でつなぐ
//※インターフェース(っぽいもの、Objective-Cではプロトコルという)は<>でくくる。

★関数定義(上記MyClassに定義しているとする)

//AS3
//関数:myFunciton、引数(2つ):myData1,myData2、引数の型:int、戻り値の型:myClass;
//関数定義
public function myFunction(myData1:int,myData2:int):myClass{
    return myData1 + myData2;
};
//関数の実行
var myInt:int = myFunction(10,100);
//Objective-C
//関数:myFunciton、引数(2つ):myData1,myData2、引数の型:int、戻り値の型:myClass
//宣言部
- (myClass)myFunciton:(int)myData1 myFuncDate2:(int)myData2;
//実装部
- (myClass)myFunciton:(int)myData1 myFuncDate2:(int)myData2{
    return myData1 + myData2;
}
//関数の実行
int myInt = [myClass myFunciton:10 myFuncDate2:100];
//※myClassはMyClassのインスタンスとする

戻り値は()に入れて、関数名の前に記述。
引数は:でつないで関数名の後に記述
注意するのは、2個以降の引数にはラベル名を書く(ここでは、myFuncDate2)
こうすることで、実行部での見通しがよくなる。
(ASの場合は数字だけなので、何のためのデータだったか忘れやすい)

たぶんこんな感じ、なのかな・・・
(実際にテストしてないです・・・)

[iP]実機テストがうまくできないときのメモ

XcodeからiPhone実機への転送設定がなかなかできない。
ブログで情報をあされども書いてあることがバラバラで半日以上はまった。
というわけで、2010年2月16日現在での箇条書きなメモ。

・Certificateの登録はキーチェーンのログインでOK。
・システムの言語設定は日本語のままでOK。
・AppIDsのAppIDは*だとダメ。例のとおりのcom.hoge.hogeappとか適当でOK
・SDKのバージョンと実機のヴァージョンが違うとエラー(Provisioningが黄色のまま)

[AS]デザインパターン シングルトンパターンの使い方

製作なんてどうせ1人でやるから、Singletonなんて特に決めなくても、自分で覚えてるからいいや、と思ってました。
が、改めて、書籍:ActionScript3.0デザインパターンに書かれているSingletonの基本ソースを見て目からうろこが。。。
Singleton以外のところで感動したのでメモ。
今までのかなり無駄なことをしてたかも。

まずはSingletonクラスの基本ソース

package  {
	/**
	 * ...
	 * @author 393
	 */
	public class SingletonModel{
		//自身をクラスメンバーとすることでどこからでもアクセスできるようにする。
		private static var instance:SingletonModel;
		
		//SingletonEnforcerを引数とすることで外からインスタンス化をできないように。
		//※ただ、引数にnullを設定すれば外からでもインスタンス化できちゃうけど
		public function SingletonModel(enforcer:SingletonEnforcer) {}
		
		//このメソッドでSingletonModelのインスタンス(instance)の参照を取れる
		public static function getInstance():SingletonModel{
			//SingletonModel.instanceが生成されてなければ生成してから、
			if (!SingletonModel.instance){	
				SingletonModel.instance = new SingletonModel(new SingletonEnforcer());
			}
			//returnでインスタンスを返す
			return SingletonModel.instance;
		}
	}
}
class SingletonEnforcer {}

なにが目からうろこだったかって、自分自身をクラスメンバーとして保持するという方法。
これなら、どこのクラスからでも直接参照が取れるから、インスタンスの参照を持ちまわらなくてもいいのよね。
今までは、データモデルとなるようなクラスを、他のクラスに参照渡しても持ちまわってた。
これは一応上記書籍のMVCパターンを参考にしてたのだけど、MをSingletonにしちゃえば、VとかCをインスタンス化するときにわざわざ参照渡さなくてもいいじゃないのかな。
でも全部そうしちゃったらなんか落とし穴もありそうなきもするけど。
とりあえず、こんど使ってみる。

[AS]Vectorで入れ子構造の配列を作るときは宣言でも入れ子構造とする。

2重配列的なことをVectorで実現する場合は最初の宣言時に構造を指定する。
宣言で領域を確保してメモリ消費を抑えるという考え方からすれば当然、か。

//これではだめ
var vec:Vector.<Vector> = new Vector.<Vector>();
vec[0] = new Vector.<Object>();
//こうする
var vec:Vector.<Vector.<Object>> = new Vector.<Vector.<Object>>();
vec[0] = new Vector.<Object>();

※普通の配列の場合は以下のようでOKね。

var array:Array = new Array();
array[0] = new Array()