FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Cocos2d Ver 2.0「updateメソッド」で経過時間をはかる

CCLayerクラス、またはCCLayerクラスを継承したクラスでは
updateメソッドというものが使えます。

-(void) update:(ccTime)delta;
こんなやつです。
こいつを使ってプレイ時間を計算することができます。

updateメソッドは1/60秒に一回どっかから呼ばれる処理で、
こちらの引数 (ccTime)delta にはその 1/60秒 (0.0166〜秒)が
ccTime型で渡されます。
( 最初の1回だけ0.13秒くらいの値が入ってたので、
前回updateメソッドが呼ばれた時からの経過時間かも?
中途半端ですいません。)

ccTime型というのはただのfloat型です。
XCode で ccTime を右クリックして「Jump to Definition」という
項目を選択すると ccTypes.h というファイルの中で
ccTime型 を float型 として定義されているのが分かります。

ですので、CCLayerを継承した自作クラスなどにccTime型の変数
(たとえば ccTime _playtime; )を持たせておき、
updateメソッド内で (ccTime)delta を足してあげれば経過時間を計測できます。

では使い方を見てみましょう。
ccLayerクラスを継承したGameSceneクラスを自分で作った場合、
このようになります。



★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★GameScene.h
#import
#import "cocos2d.h"
@interface GameScene : CCLayer
{
ccTime _playtime; // 経過時間
}
+(CCScene *) scene;
@end



★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★GameScene.m
#import "GameScene.h"

@interface GameScene()
// AAA
@end

@implementation GameScene

// ------------------------------------------------------------
// シーンを作る
+(CCScene *) scene
{
// CCScene ( 画面クラス ) を作る
CCScene *scene = [CCScene node];

// GameSceneクラス ( CCLayer ) を作る
GameScene *layer = [GameScene node];

// シーンにレイヤーを追加する ( 画面クラスにレイヤーを追加 )
[scene addChild:layer];

return scene; // シーンを返す
}
// レイヤーの説明はうまくできません;;
// とりあえず、かならず CCScene に追加すること

// ------------------------------------------------------------
// 画面を作る時(たぶん)
-(void) onEnter
{
// 最初に親の onEnter メソッドを必ず呼ぶこと
[super onEnter];

// このメソッドを使うと
// updateメソッドが1/60秒ごとに呼び出されるようになる
[self scheduleUpdate];
}

// ------------------------------------------------------------
// 画面を閉じる時(たぶん;)
-(void) onExit
{
[self unscheduleUpdate]; // これでupdateメソッドをストップ!
[super onExit]; // 親の onExitメソッドを必ずいれよう!
}


// ------------------------------------------------------------
// スケジュール
-(void) update:(ccTime)delta
{
_playTime += delta; // ここで経過時間を足してく
}

@end


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

以上で _playTime に 経過時間を入れることが出来るようになりました。
おつかれさまです。

ちなみに
GameScene.h の
ccTime _playtime; // 経過時間

についてるアンダースコア ( _ ) は
GameSceneクラスが持っている変数なんだよってことを
作り手がパッと見て分かるように意図的につけてます。
他の人のプログラムを見ていると、

_playtime;
playtime_;

のように前後に分かれています。
制作者によってまちまちのようですね。
お好きな方を使いましょう!

それと、
GameScene.m の
@interface GameScene()
// AAA
@end

// AAA
の部分には自作メソッドの定義を書きますが、
updateメソッドは書かなくても平気です。


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

最後に使ったメソッドのまとめです。

// updateスケジュールメソッド。1/60秒ごとに呼ばれるメソッド。
-(void) update:(ccTime)delta;

// updateスケジュールメソッドを開始する
[self scheduleUpdate];

// updateスケジュールメソッドを停止する
[self unscheduleUpdate]; // これでupdateメソッドをストップ!
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

pastelox

Author:pastelox
自作iPhoneゲーム,
アプリを公開しています。

アプリに関する感想や
意見などをお待ちしてます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。