Показать сообщение отдельно
Ридл Гатофель
КОТ
Аватар для Ридл Гатофель
Сообщения: 5,289
Регистрация: 14.02.2006
Откуда: ДВР
Старый пост, нажмите что бы добавить к себе блог 26 декабря 2011, 20:35
ВКонтакте
  #1788 (ПС)
-Цитата от зулусик просто Посмотреть сообщение
-Цитата от 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;

offline
Ответить с цитированием