2015-08-01 2 views
0

Я пытаюсь определить, какой спрайт был затронут в массиве спрайтов, и когда его коснулось, чтобы запустить анимацию в спрайте, который был затронут. У меня есть все спрайты, размещенные на карте уже, но когда пользователь прикасается к любому другому спрайту, за исключением первого, анимация не запускается. Я использую cocos2dx 3.5. Любая помощь приветствуется.Пытается найти, какой спрайт был нажат в массиве спрайтов onTouchEnded

это мой onTouchesEnded

void BattleScreen::onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event) 
{ 

for (auto touch : touches) 
{ 
    auto tapped = touch->getLocationInView(); 

    for (int i = 0; i < defenseSpots.size(); i++) { 

     if(defenseSpot[i]->getBoundingBox().containsPoint(tapped)) 
     { 

      sealAnimationSprite = Sprite::create("sealanimation5.png"); 
      sealAnimationSprite->setPosition(Point(defenseSpot[i]->getPosition().x, defenseSpot[i]->getPosition().y)); 
      this->addChild(sealAnimationSprite,20); 

      // now lets create animation frames 
      Vector<SpriteFrame*> sealAnimationFrames; 
      sealAnimationFrames.reserve(5); 
      sealAnimationFrames.pushBack(SpriteFrame::create("sealanimation5.png", Rect(0,0,100,100))); 
      sealAnimationFrames.pushBack(SpriteFrame::create("sealanimation4.png", Rect(0,0,100,100))); 
      sealAnimationFrames.pushBack(SpriteFrame::create("sealanimation3.png", Rect(0,0,100,100))); 
      sealAnimationFrames.pushBack(SpriteFrame::create("sealanimation2.png", Rect(0,0,100,100))); 
      sealAnimationFrames.pushBack(SpriteFrame::create("sealanimation.png", Rect(0,0,100,100))); 


      // create the animation out of the frames 
      Animation* sealAnimation = Animation::createWithSpriteFrames(sealAnimationFrames, 0.01f); 
      animateSeal = Animate::create(sealAnimation); 

      // run it and repeat it forever 
      sealAnimationSprite->runAction((animateSeal)); 
     } 
    } 
} 
} 

и вот мой метод, где я создать спрайты и поместить их

void BattleScreen::createDefenseSpots() 
{ 
Size visibleSize = Director::getInstance()->getVisibleSize(); 
Vec2 origin = Director::getInstance()->getVisibleOrigin(); 

for (int i = 0; i < 4;i++) 
{ 
    defenseSpot[i] = Sprite::create("placement.png"); 
    if(i == 0) 
     defenseSpot[i]->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); 
    if (i == 1) 
     defenseSpot[i]->setPosition(Point(visibleSize.width/1.4 + origin.x, visibleSize.height/3+ origin.y)); 
    if (i == 2) 
     defenseSpot[i]->setPosition(Point(visibleSize.width/3.5 + origin.x, visibleSize.height/1.5 + origin.y)); 
    if (i == 3) 
     defenseSpot[i]->setPosition(Point(visibleSize.width/2.5 + origin.x, visibleSize.height/4+ origin.y)); 
    this->addChild(defenseSpot[i]); 
    defenseSpots.push_back(defenseSpot[i]); 

} 
} 

Все добавляет на сцену правильно, но только спрайт воли запустить анимацию является первым. Я предполагаю, что цикл не выполняется правильно, но я не уверен, как его исправить?

Я также попытался циклически, как этот

for(int i = 0;i < 4; i++){ 
... 
} 
+0

Я понял, я использовал auto tapped = touch-> getLocationInView(); когда я должен был использовать auto tapped = touch-> getLocation(); –

ответ

0

я понял это, я использовал

auto tapped = touch->getLocationInView(); 

, когда я должен был с помощью

auto tapped = touch->getLocation(); 

Только в случай кто-то там делает мою ту же ошибку.

+0

Пожалуйста, отметьте свой ответ правильно, чтобы другие пользователи могли знать, что он был решен. –

 Смежные вопросы

  • Нет связанных вопросов^_^