2013-09-11 2 views
2

Я пытаюсь получить событие касания при касании спрайта, я прошел через множество ссылок и руководств, но не работал. используя Xcode IDE и Cocos2dx 2.1.4. Это метод, в котором есть событие touch, должно быть идеально получено в файле cpp.событие касания не обнаружено при касании спрайта в Cocos2dx

bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){ 

} 

Я пытаюсь реализовать событие касания на спрайте. я создал спрайт, как это:

CCSize size = CCDirector::sharedDirector()->getWinSize(); 
    CCSprite *backGroundSprint = CCSprite::create("bg.jpg"); 
    CCSize imageSize = backGroundSprint->getContentSize(); 
    backGroundSprint->setScaleX(size.width/imageSize.width); 
    backGroundSprint->setScaleY(size.width/imageSize.height); 
    backGroundSprint->setAnchorPoint(ccp(0, 0)); 
    this->addChild(backGroundSprint,0); 

я также включен контакт, делая это:

this->setTouchEnabled(true); 

в

bool HelloWorld::init(){ 

и в моем файле .h у меня есть этот

общественность:

virtual void onEnter(); 
virtual void onExit(); 
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); 

ответ

2

Для того, чтобы ваш CCLayer, чтобы получить штрихи, которые Вы должны сделать две вещи:

  1. вызов setTouchEnabled(true) на него.
  2. Override virtual void registerWithTouchDispatcher();

Второй метод в вашем * .cpp файл должен выглядеть следующим образом:

void Strona::registerWithTouchDispatcher() 
{ 
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, this->getTouchPriority(), true); 
} 

Plus вы также должны помнить, что CCSprites не имеют сенсорные возможности, поэтому при использовании при таком подходе вам нужно будет проверить, произошло ли касание в ограничительной рамке спрайтов (или сделайте некоторые другие тесты для ваших нужд).

+0

Спасибо, что было очень helpful..but еще мне нужно, чтобы оживить изображение из одно место в другое, если вы можете направить меня куда-нибудь, где я могу получить помощь, он будет благодарен. –

+0

Официальные форумы, хотя и немного загроможденные, весьма полезны. Чтобы намекнуть на простую анимацию: 'runAction (...)' и 'CCMoveTo' - это то, что вы ищете. – Losiowaty

+0

извините за угон, но как обнаружить прикосновение внутри спрайта? Я использовал CCSprite :: boundingBox(), но неверно для спрайтов внутри дочерних элементов :( – Zennichimaro

1

Вы Включить контакт и зарегистрировать его в .cpp файле

this->setTouchEnabled(true); 
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0); 
1

Чтобы проверить Sprite TouchEvent в Cocos2dX

void GameLayer::ccTouchesBegan(CCSet* touches, CCEvent* event) 
{ 
    CCTouch* touch = (CCTouch*)(touches->anyObject()); 
    CCPoint location = touch->getLocationInView(); 
    location = CCDirector::sharedDirector()->convertToGL(location); 


    if(sprite->boundingBox().containsPoint(location)) 
{ 
    CCLog("Sprite Touched"); 
} 
} 
Смежные вопросы