2017-02-18 8 views
0

Я хочу определить, к какому объекту карты я коснулся. Картой является пользовательский класс, который распространяется на кокос Sprite.Обнаружение, которое было расширено спринт, я коснулся

Я хотел бы назвать методы участников на карточке. Что-то вроде этого: if (target is Card) target.openCard();

спасибо, что заранее.

Класс Main Body

bool HelloWorld::init()  
{ 

... some init code, generating card arrays, shuffling 

// draw memory cards 
int count = 0; 

for (int i = 0; i < 5; i++) 
{ 
    for (int j = 0; j < 4; j++) 
    { 
     auto card = Card::createCard(); 
     card->customInit(cardsPictures[count]); 
     this->addChild(card); 

     card->setPosition(100 + i*100, 600 - j*100); 

     count++; 
    } 

} 

// register event listener 
auto touchListener = EventListenerTouchOneByOne::create(); 

touchListener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); 
touchListener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); 
touchListener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this); 
touchListener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this); 

_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this); 

return true; 
} 

bool HelloWorld::onTouchBegan(Touch* touch, Event* event) 
{ 
    auto target = event->getCurrentTarget(); 

    if (target is Card) target.openCard(); // not working 

    return true; 
} 

ответ

0
(target is Card) 

Это не выглядит как C++ мне. Что это ? : D

Первый: Является ли цель указателем? Если так сделать:

target->openCard(); // instead of target.openCard(); 

Во всяком случае, если вы хотите, чтобы вызывать методы объекта, который вы УВЕРЕНЫ имеет тип карты, возможно, вы должны сделать:

Card* myCard = static_cast<Card*>(target); 
myCard->openCard(); 

Чтобы быть честным, если вы действительно пост соответствующий код было бы трудно для кого-либо помочь вам. Что Карточка даже выглядит? (Мне все равно! XD)