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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 14:02   #1
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию Движение по линии

Всем привет
я нарисовал изображение средствами Canvas
Как его можно плавно передвигать по заданному отрезку(x1,y1; x2,y2) с заданной скоростью?
Заранее благодарен
FanRa3 вне форума Ответить с цитированием
Старый 20.02.2011, 14:25   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

просто запусти
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Canvas do
  begin
    MoveTo(PenPos.X - 10,PenPos.Y - 10);
    LineTo(PenPos.X + 20,PenPos.Y + 20);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with Canvas do
  begin
    Pen.Width := 20;
    MoveTo(0,0);
    Pen.Mode := pmNotXor;
    LineTo(PenPos.X + 10,PenPos.Y + 10);
  end;
end;
человек змеику делает, посмотри может что полезное извлекеш
http://programmersforum.ru/showthread.php?t=139104
VirusN13

Последний раз редактировалось ArtGrek; 20.02.2011 в 14:31.
ArtGrek вне форума Ответить с цитированием
Старый 20.02.2011, 14:34   #3
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

это отрисовка линии. а мне надо чтобы по ней с указанной скоростью двигался нарисованный объект(отрисовка объекта в процедуре)
FanRa3 вне форума Ответить с цитированием
Старый 20.02.2011, 14:37   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
а мне надо
фантазию включить
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 20.02.2011, 14:48   #5
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
фантазию включить
я видел тему на 1 форуме, но потерял
там всё подробно было описано

Но всё же хотелось бы готового примера с движением квадрата по линии

Последний раз редактировалось FanRa3; 20.02.2011 в 14:58.
FanRa3 вне форума Ответить с цитированием
Старый 21.02.2011, 01:16   #6
SalasAndriy
Форумчанин Подтвердите свой е-майл
 
Аватар для SalasAndriy
 
Регистрация: 01.11.2007
Сообщений: 157
По умолчанию

готового примера нет... ищите алгоритм Брезенхэма... Этот алгоритм рисует линию по двум указанным точкам)) Но если его переделать под себя... то можно вместо рисования линии рисовать какой-то объект по тех точках которые располагаются на линии, а вот скорость уже определяйте сами)) Таймер используйте... Приспособьте алгоритм к таймеру) не так уже это и сложно)) Дал вам хорошую наводку) ищите...

Вот вам еще статья из Википедии:
http://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма
SalasAndriy вне форума Ответить с цитированием
Старый 21.02.2011, 01:25   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

движение квадрата
Код:
var
  Form1: TForm1;
  i, j: integer;
  posX, posY: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Canvas do
  begin
    for i := 1 to 20 do
      for j := 1 to 20 do
        Pixels[posX + i, posY + j] := clBlack;
    inc(posX, 5);
    inc(posY, 5);
    for i := 1 to 20 do
      for j := 1 to 20 do
        Pixels[posX + i, posY + j] := clBlack;
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  with Canvas do
  begin
    Pen.Width := 20;
    Pen.Mode := pmNotXor;
    for i := 1 to 20 do
      for j := 1 to 20 do
        Pixels[posX + i, posY + j] := clBlack;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  posX := 0;
  posY := 0;
end;

end.
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 01:26   #8
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Какой Брезенхэм ??? Зачем операцию сложения двух переменных решать через интегралы ???
Что, имея линию, трудно нарисовать ее уравнение ?
А сделать привязку нужной точки фигуры (например, ее центр) к линии по этому уравнению тоже трудно ?
И поехали дальше по линии, меняя LEFT и TOP фигуры в соответствии с текущей точкой линии...
А скорость можно и опытным путем установить с помощью SLEEP-ов.
asmodey1 вне форума Ответить с цитированием
Старый 21.02.2011, 01:38   #9
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

автор видимо больше хотел узнать о
Pen.Mode := pmNotXor;
не знал как стреть за собои)))))

почитаите о режимах, в етом например если на одном месте нарисовать что то, то в первыи раз оно рисуеца, а во второи стираеца
но если игру делать собрались, советую наити больше инфы и разобраца с Canvas
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 21.02.2011, 01:46   #10
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
автор видимо не знал как стреть за собои
Ну тогда пусть разберет простенький пример движения по прямой:
pr_girl.rar
asmodey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 1 пиксель. ImmortalAlexSan Общие вопросы Delphi 12 25.10.2012 19:05
Движение со скоростью света и быстрее скорости света - Сверхсветовое движение Alar Свободное общение 354 13.11.2011 21:32
Движение линии motaro Помощь студентам 0 19.02.2011 20:46
Рисование линии Cpluser Общие вопросы .NET 8 17.05.2010 00:43
Движение ломанной линии Делфи Walter Помощь студентам 8 23.05.2009 19:42