4

*-[CCTouchDispatcher forceAddHandler:array:]、/ libs / cocos2d / Platforms / iOS / CCTouchDispatcher.m:108でのアサーションの失敗

*キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「タッチディスパッチャーにデリゲートがすでに追加されています。」

それを引き起こしている線は

skillsMenu.isTouchEnabled = YES;

skillsMenuはただのCCMenuです。私は上記の行でそれを有効/無効にするのが好きです。

問題は、このエラーを適切に解釈する方法がわからないことです。このプロパティを設定すると、このようなエラーが発生する理由がわかりません。

そもそもその行を使うのは間違っていたのかもしれません。を有効/無効にするより良い方法はありませんCCMenuか?

cocos2d-iphone 1.0.1

4

2 に答える 2

8

isTouchEnabledオブジェクトのタッチハンドラーを登録/登録解除します。

同じ手順でタッチハンドラーを登録および登録解除すると、過去に問題が発生しましたが、最近のバージョンでは、これは修正されたと思います。

いずれにせよ、単に一時的にメニューを有効/無効にしたい場合は、個々のメニュー項目を有効/無効にすることはそれほど問題になりません。

-(void) modifyMenu:(CCMenu*) menu withEnabledValue:(BOOL) enabled
{
    CCMenuItem *menuItem;
    CCARRAY_FOREACH(menu.children, menuItem)
    {
        [menuItem setIsEnabled: enabled ];
    }
}
于 2012-12-01T02:28:16.373 に答える
2

CCMenuには.enabledプロパティ(設定可能)があります。代わりにそれを使用してください。isTouchEnabledとの違いは、メニューがタッチディスパッチャから登録/登録解除されないことです。代わりに、myMenu.enabledがfalseの場合、CCMenuのccTouchBeganデリゲートメソッドの最初からタッチが無視されます。これはよりクリーンで、isTouchEnabled(CCMenuが拡張するCCLayerクラスのプロパティ)で遊ぶという罠を回避します。

于 2012-12-01T04:14:41.177 に答える