如何在节点后的场景中获取鼠标的光标位置?解决了

时间:2019-06-04 23:00:53

标签: cocos2d-x

我有一个场景,使用以下内容可以跟随子画面(玩家)

auto followTheSprite = Follow::create(m_box, Rect::ZERO);
this->runAction(followTheSprite);

这很好,我还想将精灵点旋转到鼠标光标,然后我添加了 一个EventListenerMouse方式:

auto mouseListener = EventListenerMouse::create();
mouseListener->onMouseMove = CC_CALLBACK_1(HelloWorld::onMouseMove, this);

在我的HelloWorld :: onMouseMove中,我这样写:

void HelloWorld::onMouseMove(cocos2d::Event* event){
    if (m_box) {
        EventMouse* mouseEvent = (EventMouse*)event;
        cocos2d::Vec2 tankPosition = m_box->getPosition();
        cocos2d::Vec2 cursorPosition = mouseEvent->getLocation();
        Vec2 diff = cursorPosition - tankPosition;
        float angle = atan2f(diff.y, diff.x)*(180/3.1416)
        m_box->setRotation(angle);
    }
}

这不起作用,在游戏启动时触发时,我的精灵的初始点是(640,480),此时 cursorPosition 向我显示了我认为正确的值,我的意思是,值范围看起来适合屏幕大小以及我的精灵的方向,如果它在屏幕上移动(例如,我观察到),则指向鼠标光标并跟随它,但是,当精灵开始在屏幕上移动时,世界,它远离起点,精灵没有指向光标,并且我从光标那里获得的值对我来说并不有意义,我应该指定与 tankPosition 类似的值,但是值,例如起始值,我能想到的是,游标的值是相对于屏幕而不是相对于世界的,但是我不确定这是否正确,并且我尝试使用:

Director::getInstance()->ConverteToGL(cursorPosition)

但我得到的值与 cursorPosition 相似,但未使用 ConverteToGL

解决方案:

也可以在以下位置找到该解决方案: https://discuss.cocos2d-x.org/t/how-to-get-correct-vector-for-cursorposition-in-scenes-that-follow-sprite/46789

我通过在屏幕坐标中使用tankPosition和cursorPosition解决了这个问题:

void HelloWorld::onMouseMove(cocos2d::Event* event){
    if (m_box) {
        EventMouse* mouseEvent = (EventMouse*)event;
        Vec2 tank = convertToWindowSpace(m_box->getPosition());
        Vec2 cursorPosition = mouseEvent->getLocationInView();
        Vec2 diff2 = cursorPosition - tank;
        float angle = atan2f(diff2.y, diff2.x) * (180 / 3.1416);
        m_box->setRotation(angle*-1  + 90);
    }
}

现在我的代码可以正常运行了。

0 个答案:

没有答案