-Цитата от зулусик просто
-Цитата от frolkin
Ты имеешь ввиду координаты шара в матрице или на экране?
Для анимации удобно хранить второе. А сами шары в списке списков.
хотя я не знаю какая система рисования в дельфи...
рассуждаю с точки зрения явера))
Добавлено через 1 минуту 59 секунд
-Цитата от зулусик просто
тоже нормально
будь тру, ёпта

ну тут спорно

а че спорно? только асм, только олдскул
-Цитата от Ридл Гатофель
-Цитата от frolkin
Ты имеешь ввиду координаты шара в матрице или на экране?
Для анимации удобно хранить второе. А сами шары в списке списков.
хотя я не знаю какая система рисования в дельфи...
рассуждаю с точки зрения явера))
Добавлено через 1 минуту 59 секунд
ну тут спорно

Координаты шара на экране не надо хранить вовсе, они вычисляются исходя из координатов в сетке. А анимация происходит следующим образом: стоит таймер, который вызывается с каким-то интервалом.
Ну и в нём вызывается TField.Draw, где в цилке идёт проход по шарам, у шаров хранится номер кадра, который и отрисовывается, после чего в таймере увеличивается на единицу, если номер кадра больше количества, то номер обнуляется и анимация идёт с начала.
поясни вот это
Анимация спрайтовая. Вот шар
TBall = class
Frame: Integer; - Текущий кадр анимации
Frames: Integer; - Количество кадров анимации
Animation: Hz; - ссылка на объект, в котором хранятся сами изображения
procedure Animate; - переключается на следующий кадр. Т.е. Inc(Frame); If (Frame > Frames) then Frame := 0;
procedure Draw(x, y: Integer); Рисует Animation[Frame] в точке x,y
end;
По таймеру происходит следующее:
TField.Animate (анимация всего поля)
begin
for i := 0 to ColCount - 1 do
for j := 0 to RowCOunt - 1 do
if Assigned(Balls[i][j]) then Balls[i][j].Animate; - анимируем все шары
end;
TField.Draw;
begin
рисуем само поле на канве, т.е. хуячим сетку
for i := 0 to ColCount - 1 do
for j := 0 to RowCOunt - 1 do
if Assigned(Balls[i][j]) then Balls[i][j].Draw(i*на какой-то отступ, j * на какой-то отступ);
end;