1

私はiPhone用のパズルゲームアプリケーション( YouTubeで見る)を開発していますが、実際の「ゲーム内」の部分はほぼ完了しています。これは、パズルの手がかりとパズルのピースで初期化され、パズルが解決した場合に誰かにメッセージを送信する準備ができている別個のクラス(UIViewのサブクラス)です(すべてのtouchesEndedで「完全性」チェックが呼び出されます)。

今、私はアプリケーションパターン全体をプログラムで設計する方法に悩まされています。

ゲームにはメインメニュービューパズルセレクタービューが必要であり、そこからpuzzleLevelインスタンスを「作成」できます。実際のパズルデータを別のクラス(おそらくアーカイブファイル)に保存する必要があり、設定ビューが必要です。ここで、すべてのpuzzleLevelインスタンスが使用する必要のある「グローバル」変数(角度スナップ値、スキンなど)を変更できます。

上記のすべてのビューを制御するメインのviewControllerで何かをしなければならないと感じることができますが、正確にそれを行う方法がわかりません。グローバル変数はどこに保存すればよいですか?パズルデータはどこに保存すればいいですか?「パズルの完全性」をどのように報告すればよいですか、また誰のために報告すればよいですか?ビュー階層をどのように設計する必要がありますか?

誰かが私にいくつかの概念を見せてくれるのか、それとも私が仲良くできるリンクだけを見せてくれるのだろうか。私は主に概念に興味があります。実際のコーディング部分は後で「グーグル」することができます。

4

2 に答える 2

2

通常、私のゲームの上部にはAppオブジェクトがあり、これはいくつかのAppState(メニュー、セレクター、設定など)のいずれかを所有し、Stateパターンの非常に一般的な使用法で、必要に応じてそれらを切り替えます。これらの状態は、独自のレンダリングと入力を処理し、必要なリソースを保存します。Appオブジェクトは、アプリケーション全体のグローバル設定と、状態間で共有されるオブジェクト(レンダリング、サウンドなど)も所有します。これらは個別に州に渡される場合があります。または、州は、ある時点でアプリから関連するインターフェースを要求する場合があります。

AppStateの1つはゲームのプレイ状態であり、現在のパズルの定義に加えて、このプレイセッションの現在の状態(たとえば、それがどの程度完了したか)が含まれます。前者はゲームロジック情報のみを含み、後者は入出力を処理するため、関連するGamePlayingStateが所有する別のGameクラスをまだ持っている傾向があります。

于 2009-11-20T10:15:09.800 に答える
0

NSNotificationクラスを使用する必要があると思います。サブビューを含むオブジェクト(viewController)に「リスナー」を設定するだけで、サブビューはコントローラーに通知を送信できます。次に、通知ハンドラーは任意のメソッドを呼び出すことができます。

viewController部分:

-(void) viewDidLoad
{   
//Set up a listener.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler:) name:@"finishedCurrentLevel" object:nil];   
...
}

-(void) notificationHandler: (NSNotification*) notification
{
//Notification handling.
if ([notification name] == @"finishedCurrentLevel") [self finishedCurrentLevel];
}

-(void) finishedCurrentLevel
{
//View managing code here...
}

これが設定された通知、リスニング、および通知の「応答」でした。実際の通知は次のようになります(任意のサブビューから実行できます)。

[[NSNotificationCenter defaultCenter] postNotificationName:@"finishedCurrentLevel" object:nil];

それは私の「コミュニケーション」の問題を解決すると思います。

グローバルについて私は、クラスを定義せずに、対応するglobals.hを使用して別のglobals.mファイルを作成しただけです。それらはいくつかの外部変数を「アタッチ」するだけなので、globals.hがインポートされている任意のファイルからそれらに到達できます。

于 2009-11-24T19:24:04.943 に答える