Как сравнить содержимое переменной float и Size в cocos2dx?

Вот моя функция onTouchBegan. Он работает нормально, если вы добавите в него какой-то другой код. Например Вы воспроизводите звук при прикосновении к экрану или рисуете там спрайт. Прямо сейчас я пытаюсь проверить, где на экране, игрок трогает? В зависимости от этого, шар будет двигаться вверх или вниз.

Проблема: переменная местоположения имеет тип float, а visibleSize имеет тип Size. Я попробовал 'c-style typecast', это не работает. Может кто-нибудь сказать, пожалуйста, как мне это сделать? благодарю вас.

bool HelloWorld::onTouchBegan(cocos2d::Touch *pTouches,cocos2d::Event *pEvent)
{


   auto location = pTouches->getLocationInView();
   Size visibleSize = Director::getInstance()->getVisibleSize();
   location = Director::sharedDirector()->convertToGL(location);

   auto _ball = global_ball;
   if(location.x > (float)visibleSize/2)
   {
     _ball->MoveDown();
   }

   else
   {
     _ball->MoveUp();
   }
}

2 ответа

Решение

Размер содержит ширину и высоту. Вы, вероятно, хотите сравнить с одним из них.

Вы можете сделать это из следующего кода:

        auto listener1 = EventListenerTouchOneByOne::create();
        listener1->onTouchBegan = [](Touch* touch, Event* event){
            auto target = static_cast<Sprite*>(event->getCurrentTarget());
            Point locationInNode = target->convertToNodeSpace(touch->getLocation());
            Size s = target->getContentSize();
            Rect rect = Rect(0, 0, s.width, s.height);
            if (rect.containsPoint(locationInNode))
            {

                // do whatever you want to do on touch

            }
            return false;
        };
        _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);

Я надеюсь, что это помогает.

Другие вопросы по тегам