6

私は Cocos2d-x を使用しており、HelloWorld プロジェクトでタッチを検出しようとしています。運がないのに。

.h

class HelloWorld : public CCLayer{

private:
    CCSpriteBatchNode * _batchNode;
    CCSprite *_turkey;
    virtual void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);

.ccp

void HelloWorld::ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event){
    CCLog("this");
}

しかし、問題は、画面をクリックしても「これ」がログに表示されないことです。ここで何が欠けていますか?

ありがとう!

編集、

このチュートリアルを使用しています。 http://www.raywenderlich.com/11338/cocos2d-x-for-ios-and-android-space-game

4

6 に答える 6

20

タッチを受け取るには、CCTouchDispatcher に登録する必要があります。

init()タッチを受け取るために、メソッドに次のように記述します。

CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this, 0);

また、対象となるタッチ デリゲート メソッドを介してタッチ イベントを受け取ることをお勧めします。

virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

これらのメソッドを呼び出すには、タッチ ディスパッチャに登録する必要がありますが、これは少し異なります。

CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);

編集

新しいココスのバージョンCCTouchDispatcherは次の場所にありCCDirectorます:

次のようになります。

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
于 2012-06-21T15:11:58.030 に答える
8

非常にシンプルなものを追加しただけです

this->setIsTouchEnabled(true);

私のinit();に 関数。

于 2012-06-21T16:38:06.483 に答える
2
'this' never shows up in the log

ヒント別のバージョンの Cocos2D ライブラリを使用している可能性があります。cocos2d.hプロジェクトに移動して確認してください。(サンプルは 1.0.1 で書かれています)。別のバージョンを使用している場合 (推測)、別のccTouchesBegan署名を使用したり、機能させるだけでなく、それ以上のものを修正したりする必要があるかもしれませんsetIsTouchEnabled。サンプルをダウンロードしたところ、ccTouchesBegan呼び出しは完璧に機能します - 変更はありません。

于 2012-07-27T00:04:11.387 に答える
0

this->setTouchEnabled(true);CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);残念ながら、私のccTouchMovedが何も拾わないよりもうまく機能します... :(

于 2013-04-17T14:53:10.147 に答える