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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2011, 23:28   #1
Fiery Fox
Пользователь
 
Регистрация: 03.02.2010
Сообщений: 28
По умолчанию [canvas]

Я наверное уже всем надоел
Но, как при рисовании пикселей, удалять каждый прежний пятый?)
ну.
по идее надо создать массив, куда будут заноситься твочки
и удалять x[i-5],y[i-5];
например
рисую на форме на он мауз мув

Код:
var
xx,yy:array of integer;
i:integer;
begin


if not (ssLeft in Shift) then exit;
inc(i);
with form3.canvas do begin


 pixels[XX[i-5],YY[i-5]]:=clwhite;
 pixels[xx[i],yy[i]]:=clblack;
 x[i]:=X;
 y[i]:=Y;

 end
end;
ну как то так.
просто вечером увидел красивые графические программы, а голова как сделать элементарное стирание пятого элемента, не может понять :\
Fiery Fox вне форума Ответить с цитированием
Старый 22.02.2011, 00:26   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Ну ход мысли верный, в принципе ) Только я хвост до 24 увеличил, на 5 не видно почти ничего.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

const
  c_tail_len         = 24;

type
  TForm1 = class(TForm)
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
    tail: array[0..c_tail_len - 1] of TPoint;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  move(tail[0], tail[1], (c_tail_len - 1) * sizeof(tail[0]));
  tail[0].X := X;
  tail[0].Y := Y;
  //
  Canvas.Pixels[X, Y] := clBlack;
  Canvas.Pixels[tail[c_tail_len - 1].X, tail[c_tail_len - 1].Y] := Color;
end;

end.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 00:39   #3
Fiery Fox
Пользователь
 
Регистрация: 03.02.2010
Сообщений: 28
По умолчанию

спасибо большое)
но можно комментариями описать, почему именно массив Поинтов и что делают первые 3 строки процедуры моуз мув.
потому что каждется, я не очень знаком с таким представлением массива.

во второй и третьей строке мы присваиваем значениям массива с индексом ноль, значения икса и игрика, правильно?
но как они потом запоминают остальные координаты?
--
и массив поинтов, потому что можно присвоить ему значения [].x и [].y, я правильно понял?

--

так.
строится массив, коммандой мув сдвигаются значения вправо с 0го по 23*надлинумассива и нулевому присваевается текущее значение икса и игрика, рисуется новая точка, убирается последняя точка массива, процедура заканчивается и при след. движении массив опять сдвигается вправо и все начинается сначала, правильно?)

Последний раз редактировалось Fiery Fox; 22.02.2011 в 00:50.
Fiery Fox вне форума Ответить с цитированием
Старый 22.02.2011, 02:28   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

да, всё верно )

В принципе, move() не самое удачное решение, че-то я тормознул. Достаточно как в игре с питончиком, хранить индекс головы:

Код:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  tail[head].X := X;
  tail[head].Y := Y;
  //
  inc(head);
  head := head mod c_tail_len;
  //
  Canvas.Pixels[X, Y] := clBlack;
  Canvas.Pixels[tail[head].X, tail[head].Y] := Color;
end;
head -- эту переменную типа integer добавить в форму, рядом с объявлением массива tail[].
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas Auron Общие вопросы Delphi 8 13.12.2010 23:14
3D canvas konikovskit Мультимедиа в Delphi 1 06.09.2010 22:02
Canvas ZET78 C++ Builder 5 21.05.2010 20:26
Canvas Jai Общие вопросы Delphi 7 15.05.2009 13:11