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

Delphi Sources



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

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

Собственно сабж. Использовать нужно элемент Canvas.
Даже не представляю как это можно выполнить. Помогите пожалуйста.

Последний раз редактировалось fuzo, 11.11.2010 в 17:06.
Ответить с цитированием
  #2  
Старый 11.11.2010, 16:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Что-бы это заработало, вам надо сделать простейшую трансформацию. Скажем линия в координатах 50,50,60,100 должна быть перемещена в новые координаты 50,50,90,100 за 10 шагов. Вы разбиваете траекторию перемещения на 10 шагов, для каждого из шагов получаете новое положение линии. Последовательно выводите линию в новых координатах убирая ее из старых.
Вот когда вы сделаете это, тогда уже все остальное сделать будет элементарно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 11.11.2010 в 16:35.
Ответить с цитированием
  #3  
Старый 11.11.2010, 16:53
fuzo fuzo вне форума
Прохожий
 
Регистрация: 11.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

а как правильно задать эти кординаты для конваса?
какой командой

Последний раз редактировалось fuzo, 11.11.2010 в 16:57.
Ответить с цитированием
  #4  
Старый 11.11.2010, 17:33
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
Рисование на канвасе?
Canvas.MoveTo - переместить по нужным координатам.
Canvas.LieTo - нарисовать линию.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 11.11.2010, 17:40
fuzo fuzo вне форума
Прохожий
 
Регистрация: 11.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

вот с горем пополам нарисовал этого человечка

Код:
Canvas.Brush.Color:=clRed;
Canvas.Ellipse(15,15,50,50);
Canvas.MoveTo(30,50);
Canvas.LineTo(30,130);
Canvas.MoveTo(30,130);
Canvas.LineTo(20,170);
Canvas.MoveTo(30,130);
Canvas.LineTo(40,170);
Canvas.MoveTo(10,80);
Canvas.LineTo(50,80);

Но как его заставить двигаться без понятия
Ответить с цитированием
  #6  
Старый 11.11.2010, 19:16
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

посмотри вот этот код, в качестве примера:
man_walk.zip
Ответить с цитированием
  #7  
Старый 13.11.2010, 09:30
fuzo fuzo вне форума
Прохожий
 
Регистрация: 11.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

что то этот пример не запускается, а в коде не очень понятен ход работы..
Ответить с цитированием
  #8  
Старый 13.11.2010, 10:31
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от fuzo
что то этот пример не запускается
Написано в Delphi 2009, просто скопируй коды процедур в новый проект.
Цитата:
Сообщение от fuzo
а в коде не очень понятен ход работы..
Да там всё просто, переменная Х1 определяет положение человечка на форме (по оси Х):
Код:
MoveTo(X1, 50); // рисуется туловище
LineTo(X1, 100);

переменная Х2 определяет положение рук и ног относительно туловища:
Код:
//рисуются руки:
MoveTo(X1 - X2, 100); //левая
LineTo(X1, 50);
LineTo(X1 + X2, 100); //правая, аналогично с ногами
по таймеру значение переменных меняется, и человечек "ходит"

Последний раз редактировалось ryderx34, 13.11.2010 в 12:21.
Ответить с цитированием
  #9  
Старый 13.11.2010, 13:06
fuzo fuzo вне форума
Прохожий
 
Регистрация: 11.11.2010
Сообщения: 10
Репутация: 10
По умолчанию

создаю новый проект копирую код, добавляю таймер. Но почемуто на форме ничег оне происходит

Сделал по своему, пока без движения ног только руки. Но почемуто цикл не выполняется. В чём ошибка? ( вернее он выполняется но только в 2 шага, а затем по кругу с добавлением шага не идёт, а просто повторяетя).
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
var         i,n,h:integer;
begin
with PaintBox1 do begin
h:=0;
n:=1;
for i:=1 to n do
h:=h+1;
n:=n+1;
Canvas.Brush.Color:=clRed;
Canvas.Ellipse(15+h,15,50+h,50);
Canvas.MoveTo(30+h,50);
Canvas.LineTo(30+h,130);
Canvas.MoveTo(30+h,130);
Canvas.LineTo(20+h,170);
Canvas.MoveTo(30+h,130);
Canvas.LineTo(40+h,170);
Canvas.MoveTo(10+h,80);
Canvas.LineTo(50+h,80);
i:=2;
Sleep(400);
refresh;
i:=3;
Canvas.Brush.Color:=clRed;
Canvas.Ellipse(25+h,15,60+h,50);
Canvas.MoveTo(40+h,50);
Canvas.LineTo(40+h,130);
Canvas.MoveTo(40+h,130);
Canvas.LineTo(30+h,170);
Canvas.MoveTo(40+h,130);
Canvas.LineTo(50+h,170);
Canvas.MoveTo(40+h,80);
Canvas.LineTo(20+h,100);
Canvas.MoveTo(40+h,80);
Canvas.LineTo(60+h,100);
Sleep(400);
refresh;
end;
end;
Ответить с цитированием
  #10  
Старый 13.11.2010, 15:31
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от fuzo
создаю новый проект копирую код, добавляю таймер. Но почемуто на форме ничег оне происходит
Нужно было сперва создать обработчики событий OnPaint и OnTimer, а уже потом вставлять в них код или на вкладке Events назначить процедуры в качестве обработчиков. Иначе эти процедуры не будут связаны с объектами.
Вот я сделал всё в виде одной процедуры, так будет проще:
Код:
procedure WalkingMan(Canvas: TCanvas; Width: Integer; var X1, X2, I: Integer);
begin
  if X1 < Width then
      X1 := X1 + 20
  else
      X1 := 20;
  if I < 7 then
    Inc(I)
  else
    I := 0;
  case I of
    0:X2 := 20;
    1:X2 := 15;
    2:X2 := 10;
    3:X2 := 5;
    4:X2 := 0;
    5:X2 := 5;
    6:X2 := 10;
    7:X2 := 15;
  end;
  with Canvas do
  begin
    FillRect(Canvas.ClipRect);
    Ellipse(X1 - 20, 10, X1 + 20, 50);
    MoveTo(X1, 50);
    LineTo(X1, 100);
    MoveTo(X1 - X2, 100);
    LineTo(X1, 50);
    LineTo(X1 + X2, 100);
    MoveTo(X1 - X2, 150);
    LineTo(X1, 100);
    LineTo(X1 + X2, 150);
  end;
end;
Объяви три глобальных переменных типа Integer:
Код:
var
  Form1: TForm1;
  A, B, C: Integer;
и в OnTimer вызывай эту процедуру таким образом:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  WalkingMan(Form1.Canvas, Form1.Width, A, B, C);
end;

Последний раз редактировалось ryderx34, 13.11.2010 в 15:43.
Ответить с цитированием
  #11  
Старый 13.11.2010, 19:08
fuzo fuzo вне форума
Прохожий
 
Регистрация: 11.11.2010
Сообщения: 10
Репутация: 10
Лампочка

Всё СПАСИБО. Разобрался
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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