Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.035 c
3-1099128141
Hmm
2004-10-30 13:22
2004.11.28
Excel таблица в Delphi. Редактирование, удаление, поиск ???


1-1100618001
snake1977
2004-11-16 18:13
2004.11.28
Destructor для наследника TComboBox


3-1099043189
Tolya
2004-10-29 13:46
2004.11.28
No address specified.


8-1093602567
Calm_Kid
2004-08-27 14:29
2004.11.28
Странности с waveInStop ?


4-1097774650
ALex B.
2004-10-14 21:24
2004.11.28
Win Api функция чтения из регистра.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский