Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 14:01   #1
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию Движение картинки по форме при нажатии клавиши(delphi))

Прошу помощи. Задачка состоит в следуйщем:
Имеется дерево на котором висять яблоки. При нажатии кнопки, с использованием Timer, нужно чтоб яблоки медленно падали на землю.
Пробовал использовать в цикле sleep, для задержки. Но прога виснет и через время появляется конечный результат.

Последний раз редактировалось CAN-UKRAINE; 30.10.2011 в 14:06.
CAN-UKRAINE вне форума Ответить с цитированием
Старый 30.10.2011, 17:21   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Опиши запись яблоко (apple). в ней укажи 2 числа - координаты. и 1 логическую переменную - указывающую на процесс падения (назову её isfalling ). заведи массив этих записей по нужному числу яблок, можно даже динамический массив (назову apples), под количество яблок отведи переменную или константу (назову count). создай константу speed - скорость падения в пикселях. заведи переменную типа tbitmap для рисунка яблока и для дерева (treebmp, applebmp). заведи константу уровня земли (ground)
При запуске проги (formcreate) каким-либо образом проставляй все координаты яблок-apples(укажи в коде, читай из файла, хоть у юзера запрашивай), isfalling сама будет false, её не трогай. на форме кнопка "пуск", таймер на сколько надо (свойство interval в миллисекундах).
код на кнопку :
Код:
timer1.enabled := true;
for i := 1 {или 0, зависит от массива} to count {тут может понадобится -1 если дин.массив} do
apples[i].isfalling := true;
код на таймер:
Код:
for i := 1 to count do // индексация аналогично как в кнопке
begin
if apples[i].isfalling then 
  inc (apples[i].y, speed);
if apples[i].y > ground then 
  apples[i].isfalling := false;
end;
repaint;
код для formpaint :
Код:
canvas.draw(х_дерева, у_дерева, treebmp);
canvas.framerect(rect(0, ground, clientwidth, ground);
for i := 1 to count do // индексация аналогично как в кнопке
  canvas.draw(apples[i].x, apples[i].y, applebmp);
end;
правильно соберешь прогу и будет работать ) хотя не проверял, мелкие косяки могут быть
phomm вне форума Ответить с цитированием
Старый 30.10.2011, 18:57   #3
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию

Спасиба огромное!!
Я немного помудрил и вот что получилось: Может кому то поможет)))
Код:
n: integer;      //глобальная переменная
......
procedure TForm1.Timer1Timer(Sender: TObject);
var t: integer;
begin
   t:=610;           //координаты земли
   If n=1 then      //когда n=1 , по очереди начинают падать яблоки
   begin
   If Image7.Top<t then Image7.Top:=Image7.Top+10
   else          
   If Image6.Top<t then Image6.Top:=Image6.Top+10
   else
   If Image5.Top<t then Image5.Top:=Image5.Top+10
   else
   If Image4.Top<t then Image4.Top:=Image4.Top+10
   else
   If Image3.Top<t then Image3.Top:=Image3.Top+10
   else
   If Image2.Top<t then Image2.Top:=Image2.Top+10;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 n:=n+1;  
end;
если в процедуре TForm1.Timer1Timer убрать все else, получим одновременное падение все яблок

Последний раз редактировалось Stilet; 30.10.2011 в 18:59.
CAN-UKRAINE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение картинки по форме при нажатии клавиши (любой) mihaillo Общие вопросы Delphi 3 04.03.2018 19:18
Событие при нажатии клавиши. werrey Общие вопросы Delphi 3 09.06.2011 21:33
завершение цикла при нажатии клавиши LLIyPI/IK Общие вопросы C/C++ 8 12.02.2010 13:29
Движение картинки по форме SaiLight Свободное общение 1 04.06.2009 04:28
Событие при нажатии клавиши Enter Inbox Общие вопросы Delphi 4 12.06.2007 14:18