2010-11-23 5 views
0

ボタンがあるシーンがあります。ボタンをクリックすると、長方形のスプライトが左側からスライドします。http://img255.imageshack.us/img255/9867/slidei.pngCocos2d:1つのレイヤーを別のレイヤーに重ね​​る - あるレイヤー/リージョンのタッチを一時的に無効にすることはできますか?

この形状では、いくつかのタッチセンシティブなボタンがあります。私は長方形に触れるときにこれらを呼びたくはありません。したがって、形状が画面上に残っている限り、それらの接触は応答してはなりません。その代わりに、その茶色の上にいくつかのボタンがあり、タッチに反応します。それをどうすれば管理できますか?

シーン内の特定のレイヤーのタッチを一時的に無効にすることはできますか?矩形をCCLayerオブジェクトとして単独で使用していますか?

私は透明な背景を持っているその形状のために新しいシーンを作成することができます知っているが、私はまだボタンがタッチに反応するようにしたい:

私はそのボタンをクリックすると、形状のスライドにする場合I。もう一度クリックすると、画面上でスライドします。

答えて

0

どのユーザーインターフェイスと同様、オブジェクトに有効かどうかを知らせる必要があります。あなたの最善の策は、実際にボタンにメッセージを送り、それをオンまたはオフにすることです。

理想的には、個々のボタンやスライドで入力を反応させる代わりに、グローバルなタッチ入力ハンドラを使用するのが理想的です。これは多くの問題と余分な仕事を綴る。代わりに、反応する必要のあるすべてのオブジェクトを同じレイヤーに配置し、そのレイヤーをタッチ入力ハンドラーに登録します。これにより、すべてのタッチイベントが特定のレイヤーに転送されます。

+0

私は実際に "rects"を使って、ある点がそのrectの中にあるかどうかをチェックします。どのように私はCGRect、または一般的にオブジェクトをcocos2dで無効にできますか?あなたの2番目の言及について:私はあなたのスライドの形状のための余分なレイヤーを作成する必要がありますどこにスライドが画面上に一度押すことができるボタンだけがありますか?私は別の層の上にレイヤーがある場合、それは私のタッチ入力をキャッチしますので、下のレイヤーはタッチ情報を取得しません? – KayO

2

touchesBeganメソッドが応答する実際のボタンオブジェクトまたはCGRect領域を使用しているかどうかによって異なります。私はGamingHorrorに、最もクリーンなアプローチはボタンオブジェクトを必要に応じて直接有効/無効にすることに同意することに同意します。

ただし、スライドタッチ領域がUIViewサブクラスである限り、これは実行可能なクルーギーです。

あなたは、すべてのユーザーが触れると無効にすることができ、それがスライドする前に:

[[[のUIApplication sharedApplication] keyWindow] setUserInteractionEnabled:NO];

ビューをスライドインした後、その特定のビューでsetUserInteractionEnabled:YESを設定する必要があります。スライドアウトすると、すべてを戻すことができます。

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled:YES];

関連する問題