Как сравнить содержимое переменной 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);
Я надеюсь, что это помогает.