前へ Xcc>クォーツの世界 次へ

文字、無理っす

 あとは文字を表示したろ〜って、思ったんだけど Quartz ではとんでもなくめんどくさいみたい。

 とりあえず、今回は NSTextField 貼ってごまかしたろ。ちなみに NSTextField で文字列を表示させるには

[NSTextFieldオブジェクト setStringValue:@"メッセージ文"];

とする。ここらへんは今までの応用。

NSTextField を貼る

 NSTextField を貼って、これを MyView のアウトレットに指定する作業は以前やったので省略。

アウトレット

せっかくなんでゲーム化

 DoIt メニューが選ばれると、1秒〜3秒の間のどこかで突然タイマーが動き出し、もう一度DoIt メニューを選ぶとタイマーは止まるようにします。

if (timer) {
 [ timer invalidate];
 [ timer release];
 timer = NULL;
 ・
 ・
とすることで、メニューが選ばれる毎に ON/OFF が可能になる。当然、最初のtimer=NULLは保証される必要があるから initWithFrame に以下を追加する。
timer = NULL;

 で、その間の時間を測定して、上の NSTextField に結果を表示することにしよう。一連の NSTextField の表示は

1、Draw>DoIt メニュー実行
Ready...
2、1秒〜3秒の間のどこかで突然
Go
3、もう一度DoIt メニュー実行で、この1〜3の間の時間を表示
Result 0.25 sec

って感じに変化するわけっす。

あとは、1秒〜3秒の間の待ち状態を表現する変数の用意。今回は waitCount てのを用意して
if (waitCount == 0)
drawAlphaRects(context, startRect);
てした。この waitCount をDraw>DoIt メニュー実行時に
waitCount = rand() % (2 * 60) + 60;
とし、 timerMethod で0になるまで毎回 timerMethod-- することで、1秒〜3秒の間のどこかでアニメーションが表示されることになる。こいつも当然 initWithFrame で 0 に初期化する。

 ちなみに、アニメーションが開始されて、再度Draw>DoIt メニューが選ばれるまでの時間は counter という変数を用意して計測。

1秒〜3秒の間のどこか

 rand() を使う。これは呼び出すたびに 0 〜 0x7fffffffL の間の値がランダムに返される関数。例えば

 int x = rand() % 100;

とすれば x には、0〜99 の範囲でランダムな値を得ることができる。

 ただし、計算で作るので、乱数発生パターンは同じになってしまう。これを防止するために srand() に現在時刻から作り出した値を渡したりする。

神速のインパルス〜

 で、メニューを選ぶのは面倒なので、ショートカットとして Command + R を割り当てる。 Window をはやりのメタルっぽくしたり、リサイズ不可にするのも「自由だああ〜」。

 さ〜、コンマ何秒で反応できるかな〜。

 私は最速、0.23秒でした。全然駄目。ではまた。

timeshockプロジェクト