无法在Cocos2d

时间:2017-01-05 20:08:14

标签: c++11 cocos2d-x

我正在尝试在Coco2D-x中为3D游戏构建输入处理程序。 我想用鼠标控制相机旋转,就像FPS一样。为此,我需要每帧存储前一个和当前鼠标位置,以计算每帧的增量移动并将其作为旋转应用。

文档显示获取鼠标信息的唯一方法是通过鼠标事件和事件调度程序。我试过了,但它对位置没用,因为这样,我只会在鼠标移动时刷新上一个和当前位置。如果鼠标不移动,我仍然有一些增量运动(在N帧前计算,当鼠标最后一次移动时),相机将永远移动。

有没有办法每帧都获得鼠标的位置? 我也对使用鼠标进行相机移动的任何建议持开放态度。

我在Windows 10上使用Cocos2d-x 3.13.1和Visual Studio 2015.该项目在C ++上。

感谢。

2 个答案:

答案 0 :(得分:0)

我不是Cocos2D的专家,但是从此:

  

文档显示获取鼠标信息的唯一方法是   通过鼠标事件和事件调度程序。我试过了,但确实如此   对位置没用,因为那样,我只会刷新   鼠标移动时的上一个和当前位置。如果是鼠标   不动,我仍然有一些增量运动(计算N帧   以前,当鼠标移动最后一次时)相机会移动   永远。

我认为在相机旋转计算后将增量重置为0将解决使用这些事件的问题。

答案 1 :(得分:0)

我找到了一个解决方案,可能不是最好的解决方案,但也是最简单的解决方案。

InputHandler仍然可以控制鼠标事件,它只存储鼠标的当前位置。仅在移动鼠标时才更新此位置。

CameraController每帧询问鼠标的当前位置。在此之前,它会存储前一个。 这样,我可以控制鼠标是否移动。

所以基本上我在任何需要的地方计算增量(在这种情况下是摄像机控制器),而不是每帧计算(就像我想要的输入控制器一样)。

这是在CameraController的更新功能

    mousePreviousPos = mouseCurrentPos;
    mouseCurrentPos = inputHandler->GetMousePos();
    mouseDelta = mousePreviousPos - mouseCurrentPos;

    if (mouseDelta.x != 0)
    {
        ApplyRotationAroundY(mouseDelta.x);
    }
    if (mouseDelta.y != 0)
    {
        ApplyRotationAroundX(mouseDelta.y);
    }

我会继续关注更多或更好的解决方案。 谢谢!