![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Такая вот проблема - пишу следующее:
procedure TForm1.Timer1Timer(Sender: TObject); var x: integer; begin x:=round(x+0.02); shape1.Left:=x; end; procedure TForm1.Button1Click(Sender: TObject); begin timer1.Interval:=20; end; ожидаю при этом что shape1 начнет плавно двигаться слева на право, вместо чего получаю редкие скачки на огромное расстояние, те двигается то в ту сторону, но не плавно, а гигантскими скачками. В чем дело? Я ламо, поэтому окурки в монитор не тушите) |
#2
|
|||
|
|||
![]() Вот переписал так
procedure TForm1.Timer1Timer(Sender: TObject); var dt, vx, vy, n: integer; begin vx:=5; vy:=5; dt:=20; timer1.Interval:=dt; shape1.Left:=round(shape1.Left+n*0.01*dt*vx); shape1.top:=round(shape1.top+n*0.01*dt*vy); if shape1.Left=790 or 10 then begin n:=-1; end else n:=1; if shape1.top=590 or 10 then begin n:=-1 end else n:=1; end; если не писать условия, то фигура плавно двигается, но вот условие заставляющее её отскакивать от стенок не работает((( Размер поля - 800*600, диаметр круглой фигуры - 20 пикс, помогите, почему не ферычит?? |
#3
|
||||
|
||||
![]() Надо так
var // Глобальные переменные dX : Integer = 1; dY : Integer = 1; procedure TForm1.Timer1Timer(Sender: TObject); begin Shape1.Left := Shape1.Left + dX; Shape1.Top := Shape1.Top + dY; if (Shape1.Left <= 0) or (Shape1.Left + Shape1.Width >= Form1.Width) then dX := -dX; if (Shape1.Top <= 0) or (Shape1.Top + Shape1.Height >= Form1.Height) then dY := -dY; edn; Не профи, но и не чайник ![]() ![]() |
#4
|
||||
|
||||
![]() Сорри. Вместо Form1.Height лучше написать Form1.ClientHeight.
Не профи, но и не чайник ![]() ![]() |
#5
|
|||
|
|||
![]() Огромное спасибо, ведь фактически то же писал, почему не работало (сейчас работает) )))
![]() |
#6
|
||||
|
||||
![]() Ну для начала было бы неплохо подучить синтаксис, т.к. выражение
if shape1.Left=790 or 10 неправильно. Надо (Shape1.Left = 790) or (Shape1.Let = 10), (а еще лучше использовать не =, а >= и <=). А ты выполняешь логическое или (or), а потом сравниваешь полученный результат с Shape1.Left. Надо по отдельности сравнивать с каждым значением. Также в данном случае надо использовать глобальные переменные, а не локальные. Не профи, но и не чайник ![]() ![]() |