0

古い質問のタイトル: HUD レイヤーなどの親 UIView でイベントをキャプチャする方法は?

cocos2d ではなく UI フレームワークを使用してゲームを作成しようとしています。

すべてのイベントが適切に処理された View パーシャルを作成したいと思います。それは不可能に思えます。

部分ビューとは、Ruby on Rails (および他の言語) を使用して、プレゼンテーション レイヤー (ビュー コード) の小さなチャンクをプレゼンテーション レイヤー (ビュー コード) の大きな部分に表示できるようにする方法を指します。

ゲームには、上部にスコア (およびその他のメタデータ) を含む HUD レイヤーがあり、私は使用します

[self.view addSubview:y]また [self.navigationController push...]

視覚的には、次のようになります (縮尺どおりではありません)。

+----------------------------+
|A                           |
|+--------+   +------------+ |
||B       |   |C           | |
||        |   |            | |
|+--------+   |            | |
|             |            | |
|             +------------+ |
+----------------------------+
  • セクション A には、メイン メニュー (プライマリ ナビゲーション) に関連するボタンがあります。
  • セクション B にはスコアなどのボタンがあります
  • セクション C はメイン ゲーム エリアです。

セクション A とセクション B はどちらも HUD レイヤーであり、必要に応じてクリック可能なイベントを持つことを意図しています。

同じコードを何度も繰り返したくないので、必要なビューをウィンドウに含める HUD システムがこれを達成するための最良の方法であると感じています。

私が抱えている問題は、HUD.h/HUD.m ファイルを他のビュー コントローラーに含めると、セクション C のセクション A または B のクリックを受け入れることができなくなり、イベント アクションを実行させることができないことです。メソッドがセクション C 内に存在しないと常に文句を言います。

セクション C のビューにいる場合は、A と B からのクリックを受け入れて適切に処理する必要があります。

では、HUD レイヤー システムを介してイベントをキャプチャし、イベントを適切に処理するにはどうすればよいでしょうか?

私が見た中で最も近いのは touchesBegan を使用している可能性がありますが、セクション A/B のコントローラーにあるイベントに touchesBegan イベントをリンクする方法がよくわかりません。

ありがとう。

4

2 に答える 2

0

cocos2d は自分のスキルセットに追加するのに適しているので、いくつかの異なるアイデアをテストして cocos2d を使用することにしました。

閉まっている。

于 2012-01-21T17:54:52.117 に答える
0

これがあなたの求めていることであるとは 100% 確信が持てませんが、実際にボタンに触れずにセクション B または C で発生するタップをセクション A に渡す必要があると言っている場合は、次のようにする必要があります。すべきこと: HUDItemContainerView などと呼ばれる UIView のサブクラスを作成します。UIView の -hitTest:withEvent: メソッドを次のようにオーバーライドします。

- (UIView *)hitTest:(CGPoint)point 
          withEvent:(UIEvent *)event
{
    UIView* touchedView = [super hitTest:point withEvent:event];

    if (touchedView == self)
        return nil;

    return touchedView;
}

これにより、HUDItemContainerView に次の動作が追加されます。ビューは私の後ろにあります (セクション A など)。"

次に、セクション B とセクション C のベース ビューに HUDItemContainerView を使用します。

于 2012-01-15T08:28:50.560 に答える