使对象跟随鼠标

时间:2012-02-14 00:35:29

标签: c++ visual-studio-2010 direct2d

接近这个主题的其他问题似乎并没有帮助我理解它。我刚刚开始使用Visual Studio和Direct2D编程,我无法理解如何制作两个“眼睛”,它们是椭圆内的椭圆,跟着我的鼠标。

我正在使用

的函数void MainWindow::CalculateLayout()
    const float radius3=radius/4;
    const float radius3_2=radius/5;
    const float x3=x-100;
    const float y3=y-150;
    ellipse3 = D2D1::Ellipse(D2D1::Point2F(x3, y3), radius3, radius3_2);
        //left eye

    const float radius4=radius/4;
    const float radius4_2=radius/5;
    const float x4=x+100;
    const float y4=y-150;
    ellipse4 = D2D1::Ellipse(D2D1::Point2F(x4, y4), radius4, radius4_2);
        //right eye

    const float radius5=radius/8;
    const float radius5_2=radius5/2;
    const float x5=x-100;
    const float y5=y-150;
    ellipse5 = D2D1::Ellipse(D2D1::Point2F(x5, y5), radius5, radius5_2);    
    // left eyeball

    const float radius6=radius/8;
    const float radius6_2=radius6/2;
    const float x6=x+100;
    const float y6=y-150;
    ellipse6 = D2D1::Ellipse(D2D1::Point2F(x6, y6), radius6, radius6_2);    
    // right eyeball

设置眼睛和眼球的位置。我认为应该使用this行的某些东西来控制鼠标的位置。我试图从一个空白项目,而不是从表单中做到这一点。解决方案是简单地将const float x5=x-100替换为X的{​​{1}}值吗?

1 个答案:

答案 0 :(得分:0)

你需要替换x5的定义,但是你需要用一个公式来完成它,这个公式将它限制在眼球内。

您的公式将如下所示:

// compute the angle from the eyes to the mouse
angle = arctan( (mouseY - y) / (mouseX - x) );
// x-100 and y-150 are assumed to be the origins (center) of the eyeball
// eyeballRadius should be the radius of the eyeball, or slightly smaller (so the eyes do not extend outside of it)
x5 = (x-100) + cos(angle) * eyeballRadius;
y5 = (y-150) + sin(angle) * eyeballRadius;

希望这有帮助。

要在光标非常接近时获得交叉眼睛效果,您应该让每个眼球计算出自己的角度,例如左边的leftAngle = arctan( (mouseY - (y-150)) / (mouseX - (x-100)) )