Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.07.2007, 16:11
Magnifico Magnifico вне форума
Прохожий
 
Регистрация: 26.07.2007
Сообщения: 3
Репутация: 10
По умолчанию Помогите обуздать таймер

Такая вот проблема - пишу следующее:

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  
Старый 26.07.2007, 17:38
Magnifico Magnifico вне форума
Прохожий
 
Регистрация: 26.07.2007
Сообщения: 3
Репутация: 10
По умолчанию

Вот переписал так
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  
Старый 26.07.2007, 18:14
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Надо так

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;
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #4  
Старый 26.07.2007, 18:21
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Сорри. Вместо Form1.Height лучше написать Form1.ClientHeight.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #5  
Старый 26.07.2007, 18:35
Magnifico Magnifico вне форума
Прохожий
 
Регистрация: 26.07.2007
Сообщения: 3
Репутация: 10
По умолчанию

Огромное спасибо, ведь фактически то же писал, почему не работало (сейчас работает) )))
Ответить с цитированием
  #6  
Старый 26.07.2007, 18:56
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Ну для начала было бы неплохо подучить синтаксис, т.к. выражение
if shape1.Left=790 or 10
неправильно. Надо (Shape1.Left = 790) or (Shape1.Let = 10), (а еще лучше использовать не =, а >= и <=). А ты выполняешь логическое или (or), а потом сравниваешь полученный результат с Shape1.Left. Надо по отдельности сравнивать с каждым значением. Также в данном случае надо использовать глобальные переменные, а не локальные.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025