1

編集:わかりました、TouchesTest cocos2d-x サンプルを見るだけで解決策が見つかりました。欠けていた唯一のことは、タッチ位置がスプライト rect に含まれているかどうかをテストし、タッチを主張することでした。したがって、以前のコードをそのコードに置き換えることができました

bool Artifact::claimTouch(CCTouch* pTouch)
{
    CCPoint touchLocation = pTouch->getLocation();
    CCRect boundingBox = this->boundingBox();

    return boundingBox.containsPoint(touchLocation);
}

bool Artifact::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    if (claimTouch(pTouch))
    {
        CCLog("id:%i", this->id);
        return true;
    }
    return false;
}

編集の終わり

シーンに追加したオブジェクトへの特定のタッチをインターセプトしようとしています。

2 つのオブジェクトを追加するコード:

Artifact* artifact1 = new Artifact(1);
Artifact* artifact2 = new Artifact(2);
CCRect cropRect = CCRectZero;
cropRect.size = CCSize(50,50);
artifact1->initWithFile("rock_small.png", cropRect);
artifact1->setPosition(CCPoint(100, 100));
artifact2->initWithFile("grey_rock.jpg", cropRect);
artifact2->setPosition(CCPoint(300, 200));

そして、これが私のシミュレーターで得たものです

スクリーンショット

Artifact クラスのコード

//.H

class Artifact : public CCSprite, public CCTargetedTouchDelegate
{
public:
    Artifact(int id) : id(id), pressed(false){};

    virtual void onEnter();
    virtual void onExit();

    bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
private:
    int id;
    bool pressed;
};

//.CPP

void Artifact::onEnter()
{
    CCSprite::onEnter();
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}

void Artifact::onExit()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    CCSprite::onExit();
}

bool Artifact::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLog("id:%i", this->id);

    return true;
}

画面上のどのポイントをクリックしても (2 つの正方形のいずれかをクリックしなくても)、2 番目のアーティファクトで ccTouchBegan が呼び出されます (出力は "id:2")。最後の位置 (つまり、上部の z 座標) に追加した CCSprite が画面全体を覆い、その下の要素にアクセスできないようにしています。

何が原因でしょうか?

4

1 に答える 1

1

TouchesTest cocos2d-x サンプルを見る

いくつかの重要なポイント

class Paddle : public CCSprite, public CCTargetedTouchDelegate
    virtual void onEnter();
    virtual void onExit();
    bool containsTouchLocation(CCTouch* touch);
    virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
    virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);
    virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);

これで問題が解決するはずです

于 2013-07-27T04:48:54.973 に答える