为什么我的pictureBox没有移动(Visual C ++)?

时间:2013-11-30 18:35:23

标签: c++ controls picturebox trigonometry

我正处于制定一个基本的双体问题计划的早期阶段(对于那些不知道的人来说,'双体问题'就是当你在太空中有两个物体被引力吸引到彼此时)。我设置它,以便在每个计时器滴答对象(图片框)按照输入文本框的方向(以度为单位)移动。

一旦几个IF语句确保文本框中的值有效,它们就会在Button_Press事件中执行此操作(该按钮将启动模拟):

this->SimTick->Enabled=true;  //Master timer for simulation
radians1=(int::Parse(DirectionBox1->Text))*(3.14/180);  //Converts the degrees entered for the first object into radians for use in trig functions
radians2=(int::Parse(DirectionBox2->Text))*(3.14/180);  //Converts the degrees entered for the second object into radians for use in trig functions

在timer_tick事件中:

this->Object1->Location.X+=(int::Parse(VelocityBox1->Text)*cos(radians1));
this->Object1->Location.Y+=(int::Parse(VelocityBox1->Text)*sin(radians1));
this->StartStop->Text=(radians1.ToString());  //This is just here to check that the math was correct, which it is

我有一段时间没有编写C ++,所以这可能是一个非常简单的错误,但是有没有人有任何想法,或者需要更多的代码粘贴?

1 个答案:

答案 0 :(得分:0)

除了正确更新Location属性以使其获取新值之外,您可能希望保留一个临时的x& y作为一个浮点数,以便您可以向其添加小数值。

typedef struct { float x, y ; } floatcoord ;

floatcoord  tmpLocation ;
tmpLocation.x += int::Parse(VelocityBox1->Text)*cos(radians1) ;
tmpLocation.y += int::Parse(VelocityBox1->Text)*sin(radians1) ;

this->Object1->Location.set( (int) floorf( tmpLocation.x), (int) floorf( tmpLocation.y) ;  // or however you update Location