Здесь моя функция onTouchBegan. Он отлично работает, если вы добавите в него какой-то другой код. Напр. вы воспроизводите звук при касании экрана или нарисовываете спрайт. Прямо сейчас, я пытаюсь проверить, где на экране, касается ли игрок? В зависимости от этого, мяч будет двигаться вверх или вниз.
Проблема: переменная location имеет тип 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();
}
}
Размер содержит ширину и высоту. Вероятно, вы хотите сравнить с одним из них.
Вы можете сделать это из следующего кода:
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);
Я надеюсь, что это помогает.