2012-02-14 3 views
0

Другие вопросы, близкие к этой теме, похоже, не помогают мне это очень понять. Я только начинаю программировать с помощью 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 значение MouseMove?

+2

Вы знаете, C++ позволяет использовать имена переменных, которые делают не имеют числовых суффиксов. Так, например, эллипс3 может быть оставленEyeEllipse и т. Д. Тогда вам не нужен комментарий '// left eye'. Другие, пытающиеся прочитать ваш код позже, будут вам благодарны. :) –

ответ

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)))

+0

Как бы я хотел, чтобы мыши и мыши отображали указатель мыши? – Linell

+0

Не знаю. Я думал, вы это знаете, так как вы упомянули что-то о «MouseMove». – Tim