Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Как делать анимированные спрайты?   Найти похожие ветки 

 
RyDmi ©   (2004-07-26 21:50) [0]

Я имею ввиду без всяких там TSpriteEngine и пр.?


 
kiki   (2004-07-26 22:03) [1]

RTFM NOOBISH


 
RyDmi ©   (2004-07-27 00:40) [2]

1 Не понял вас?!!


 
Evgeniy_K   (2004-07-27 05:43) [3]

Храни все кадры на одной картинки, а потом считывай со смещение. mod & div тебе помогут...


 
VolanD   (2004-07-27 09:58) [4]

А вот интересно, неужели все разработчики стратегических игр анимируют игровую- клечатую карту с помощью таймера и перерисовки всей карты через n-секунд?


 
Megabyte-CeerCop ©   (2004-07-27 12:53) [5]

В игре Киркоп я например на перерысовывал всю карту сразу, а только тайлы, попадающие в область экрана (всю то зачем).
А ещё можно перерисовывать только те части экрана, на которых в данный момент есть подвижные спрайты (это только если их вообще на карте не так много).
А на счет применения Тимера, так он для того и нужен, чтобы его юзать. Тем более, что он имеет поддержку на аппаратном уровне.


 
Белый Крыс ©   (2004-07-27 12:59) [6]

Таймер - нет, не думаю. Как минимум, GetTickCount.


 
NikeOLD   (2004-07-27 15:41) [7]


> VolanD   (27.07.04 09:58) [4]

А ты как думаешь. Перерисовывается только видимая часть. Физика - полностью.
Кстати в трехмерных играх можели тоже анимируются подобным образом - с помощью нескольких заранее загруженных в память сеток, а никак не просчетом на сколько герой поднял руку или ногу!


 
RyDmi ©   (2004-07-28 00:24) [8]

Так значет Pattern это номер кадра на склееной картинке?


 
lyeh ©   (2004-07-28 05:13) [9]

2 RyDmi ©

> Так значет Pattern это номер кадра на склееной картинке?

Да :) Его хватит, если тайлы на картинке расположены в один ряд


 
RyDmi ©   (2004-07-28 19:40) [10]

А как отрисовать картинку, скажем, во втором ряду?


 
NikeOLD   (2004-07-28 19:59) [11]

У тебя же есть количество кадров в строке, высота и ширина кадра. Вспомни, как располагаются данные в памяти и получишь ответ. Нужна одна протейшая формула.
Хотя если кадры различной ширины тогда придется возиться.


 
RyDmi ©   (2004-07-29 00:54) [12]

[11] Я только начал работать с DX (до этого только на паське примитив делал), так что если не сложно объясни мне ламерку как это сделать.


 
Megabyte-CeerCop ©   (2004-07-29 06:24) [13]

Смотри:

PH,PW - высота и ширина каждого кадра.

Row - номер ряда по горизонтали (0 - самый верхний)
Col - номер кадра в ряду (0 - самый левый)

Rect.Top := PH * Row;
Rect.Left := PW * Col;
Rect.Bottom := Rect.Top + PH;
Rect.Right:= Rect.Left + PW;

//теперь Rect указывает на нужный тебе спрайт

Однако иногда, для оптимизации сурфасы, можно сделать высоту каждого ряда уникальной, для этого создай массив, в котором будет храниться высота и начальная линия каждого ряда, и ширина кадра в ряду. Массив размером по количеству рядов.
Тогда

type tTable record
       Start :integer;
       Wight,Height : byte //Байт, если не планируеш спрайты больше чем 255*255

var Table :array [0..n] of tTable    

Rect.Top := Table[Row].Start;
Rect.Left := Table[Row].Wight * Col;
Rect.Bottom := Rect.Top + Table[Row].Height;
Rect.Right:= Rect.Left + Table[Row].Wight;


Думаю разберешься


 
NikeOLD   (2004-07-29 10:17) [14]


> RyDmi ©   (29.07.04 00:54) [12]

Не успел :)

Читай, как организовано хранение битмапов в памяти. Может уже и выяснил это, но я скажу: линейно. Т.е. ряд за рядом. Поэтому если твой битмап в длину имеет 100 пикселей, то обратившись к 101 ты получишь 1 пиксель во втором ряду. И т.д.

Стоп.... Ты под DX,что имешь ввиду DelphiX что ли? Тогда я малость промахнулся, там на такие вещи можно и не заморачиваться, хотя знать все равно надо. В DelphiX я не помощник.


 
Megabyte-CeerCop ©   (2004-07-29 13:06) [15]

В DelhiX Спрайты в Битмапе хранятся вообще только в одном ряду, поэтому ничего сложного.


 
RyDmi ©   (2004-07-29 17:46) [16]

Всем Большое спасибо. Уже организовал.
Действительно, ничего сложного. Просто я хранил анимацию своего персоонажа на одной картинке в 2 ряда:
в 1 герой идёт влево, во 2 - вправо. Ещё раз спасибо.



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.04 c
14-1099984480
Pupil
2004-11-09 10:14
2004.11.28
Простая математическая функция


1-1100264537
grig_p
2004-11-12 16:02
2004.11.28
Обрезание текста в ListView


14-1099242760
DillerXX
2004-10-31 20:12
2004.11.28
У меня сгорел винт :(((((((


1-1099203342
Skyhawk
2004-10-31 09:15
2004.11.28
XP form


14-1099310768
DeMoN-777
2004-11-01 15:06
2004.11.28
Wireless