[iPhone]Objective- Cの勉強メモ:乱数の取り扱い

まずはObjective-CというかC言語での乱数の発生させる方法。
使える関数は2種類
まず
int rand(void);
という関数でint型の乱数を返すことができる。
このときに返る値は、0~馬鹿でかい数という感じ。
馬鹿でかい数はコンパイラによって変わるらしい。
(ASのMath.random()のように、0~1未満というわけでない)

int i;
i = rand();
printf(%d,i);//0から馬鹿でかい数の間の間

ただ、このままだと乱数は実行するたびに常に同じ値を返すことになるので、初期化処理という行為が必要になる。
そこで使うのがsrand();
void srand(unsigned int 初期値);

使い方としては、rand()関数を実行する前にsrand()関数を実行することで初期化すればよし。
初期値には、絶対にかぶらない値を日付データから取ればよし。

//time(NULL)で現在の時刻が1970年1月1日午前0時0分0秒からの通算秒数で得られる。
srand(time(NULL));
rand();

以上が、C言語での設定方法

Objective-Cではsrandは以下のようにするらしい。

//NSDateインスタンスを作って、本日の日付けを秒数に換算してる
srand([[NSDate date] timeIntervalSinceReferenceDate]);
rand()

※C言語のやり方でも問題なさげ。

[AS]progression4 Index.swfからPreloaderのforeground、backgroundを参照するにはCastDocumentインスタンス経由で可能

便利すぎて自分の実装力がどんどん低下してるprogression4のメモ。

Preloaderにて表示オブジェクトを追加するには、backgroundかforegroundを使うことになります。
で、index.swfにてPreloaderのbackgroundおよびforegroundにアクセスするには、index.swfのドキュメントクラスであるCastDocumentがbackgroundおよびforegroundのプロパティを持っているので簡単に参照できます。

そこで、ちょっとはまったのが、このドキュメントクラスの参照の仕方。
結論だけ書くと、こんな感じ。

trace(manager.current.container.root);//出力:[object:index]
//Indexのプロパティを取得するにはIndexでキャストする。
trace(Index(manager.current.container.root).background.numChildren)
//[2011.10.19追記]
//Indexでキャストだとうまくいかなくなったみたい
//CastDocumentでキャストする
trace(CastDocument(manager.current.container.root).background.numChildren);

要はSceneObjectが持つcontainerプロパティのrootが、index.swfのドキュメントクラスとなっているみたい。

[AS]BetweenAS3のグループ化は、配列を使っても管理可能。  

BetweenAS3でのグループ化について。
ITween.serial()、ITween.parallel()メソッドを使う場合は

//ステージ上に_mc1と_mc2のMovieClipが配置してあるとしてフレームアクション
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;

var iTween1:ITween =  BetweenAS3.to( _mc1 , {x:100},1);
var iTween2:ITween =  BetweenAS3.to( _mc2 , {x:100},1);
var iTween:ITween =  BetweenAS3.parallel(iTween1, iTween2);
iTween.play();

ITweenインスタンスをfor文とかで一括で作りたいときは配列で管理。
その際は、parallelTweens()メソッド、serialTweens()メソッドを使う
これは便利!!!

//ステージ上に_mc0から_mc9の10個MovieClipが配置してあるとしてフレームアクション
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;

var iTweens:Array = [];
for(var i:int = 0; i < 10; i++){
var name:String = "_mc" + i;
iTweens.push(BetweenAS3.to( getChildByName(name) , {x:100},1));
}
var iTween:ITween =  BetweenAS3.parallelTweens(iTweens);
iTween.play();