Почему мой PictureBox не движется (Visual C ++)?

Я нахожусь на ранних этапах разработки основной программы для двух тел (для тех из вас, кто не знает, «проблема двух тел» — это когда у вас в космосе два тела притягиваются друг к другу под действием гравитации). Я настроил его так, чтобы при каждом отметке таймера объекты (которые являются картинками) перемещались в соответствии с направлением (в градусах), введенным в текстовое поле.

Как только пара операторов 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 ++, так что это может быть очень простой ошибкой, но есть ли у кого-нибудь идеи или нужно вставить больше кода?

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]