Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хочу написать игру лоде-рунер(с редактором карт)на движке DelphiX [Delphi, delphiX, Windows]


Страницы:   1 2 3 4 5 6 7

Jus ©   (2004-09-21 06:10:00) 

Я вот хочу написать игру лоде-рунер (с редактором карт) на движке DelphiX.
Разрешение 800х600

Там каждый спрайт 32х32.

Карта 800х512, т.е. максимальное кол-во спрайтов на карте 400шт.

Я в Form1.Create вывожу эти спрайты по массиву.
(пример без массива):

procedure TForm1.FormCreate(Sender: TObject);
begin
TLestnica.Create(SE.Engine); // лестница
...и т д
end;

и FPSпадает до 0:((

в DXTimere у меня

procedure TForm1.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
IF not DXDraw.CanDraw Then exit;
DXDraw.Surface.Fill(0);
DXSpriteEngine.Move(1000 div 60);
DXSpriteEngine.Dead;
DXSpriteEngine.Draw;
With DXDraw.Surface.Canvas Do
   Begin
     Brush.Style := bsClear;
     Font.Color := clWhite;
     Font.Size := 8;
     Textout(10, 10, 'FPS: ' + inttostr(DXTimer.FrameRate));
     Release;
   end;
DXDraw.Flip;
end;


1)Может для некоторых объектов которые нужно один раз вывести на экран отдельный DXSpriteEngine сделать, например
DXSpriteEngine 2,  и не выводить в таймер DXSpriteEngine 2.Draw, а вывести при создании формы после создания всех объектов которые нужно вывести 1 раз?или так неполучится?:(

2)Или как оно делается правильно, ведь кроме лестниц и других объектов будут ещё и всякие монстры, которых надо "отображать" в таймере и FPS упадёт снова?

3)Как повысить FPS?!


Jus   (2004-09-30 19:31:00) [61]


> Все ждут .exe :)

есть уже доделанный EditorMap.exe:)
> Неплохо было бы сделать как описал cyborg, то есть без объектов.
> Ну сам посуди, нафига они тебе (в карте)? Я так понимаю,
> каждая ячейка карты у тебя TImageSprite. Но ведь можно при
> загрузке карты всю отрисовать на отдельный TDXImageItem,
> и потом его копировать на экран. Но это опять же к сведению,
> все-таки лучшее - враг хорошего :) .

Ну да, так оно и есть, я неправильно написал, не объекты загружаюся, а спрайты.


> А какая у тя машина? Дело в том, что раз эта игра - не 3D
> шутер с кучей эффектов, то хотелось бы, чтобы она и на первых
> пнях шла с FPS>25.


Машина P-IVC/2600, 512Ram, GeForce4 128MB(пилот, колонки, коврик для мыши:))


> Jus   (21.09.04 08:02) [5]
> На моей машине
> Pentium4C/2600, 512Ram, geForce4 128mb.

Я писал.:)

> Дело в том, что раз эта игра - не 3D шутер с кучей эффектов,
> то хотелось бы, чтобы она и на первых пнях шла с FPS>25.

Она итак будет>25.


NikeOLD   (2004-09-30 17:05:00) [62]

Графику я хуже ожидал, но ты же вроде в артшколе учился?
Посмотрим на демку, тогда и оценим.


NikeOLD   (2004-09-30 17:02:00) [63]


> Зы: уходил из дома на час, пришёл, решил позвонить по телефону
> и ... понял, что забыл отключиться от интернета:)))

Надо дисконнект устанавливать по таймауту бездействия.


Servelat   (2004-09-30 16:09:00) [64]


> Кстати, как скриншоты? все посмотели и молчат...(

Все ждут .exe :) . По скриншотам можно тока графику оценить; IMHO графика для такого типа игры очень даже ничего, особенно если еще и анимировано многое из этого. Но графика (для этой конференции) не главное, вот на играбельность посмотрим, тогда и будут похвалы/разносы.

> Удаляет объекты по массиву;

Неплохо было бы сделать как описал cyborg, то есть без объектов. Ну сам посуди, нафига они тебе (в карте)? Я так понимаю, каждая ячейка карты у тебя TImageSprite. Но ведь можно при загрузке карты всю отрисовать на отдельный TDXImageItem, и потом его копировать на экран. Но это опять же к сведению, все-таки лучшее - враг хорошего :) .

> FPS 16

По идее,FPS должен быть больше 25.

> а если интервал сделать 0, то фпс будет 70.(ну это на моей
> машине).

А какая у тя машина? Дело в том, что раз эта игра - не 3D шутер с кучей эффектов, то хотелось бы, чтобы она и на первых пнях шла с FPS>25.


Jus   (2004-09-30 15:26:00) [65]


> Servelat ©   (29.09.04 23:06) [59]

Всё сделал как ты посоветовал, карта сохраняется в byte и загружается, долго ковырялся с загрузкой, но сделал, работает как часы:
Удаляет объекты по массиву;
Стирает массив;
Загружает из файла новый массив;
Строит объекты по массиву.


Теперь можно наконец заняться игровой частью:)

Зы: уходил из дома на час, пришёл, решил позвонить по телефону и ... понял, что забыл отключиться от интернета:)))

Кстати, как скриншоты? все посмотели и молчат...(


Jus   (2004-09-30 12:13:00) [66]

Хочу добавить, там все объекты(почти) анимированные, всё крутится, вертится, шевелится, короче как положено!:)


Jus   (2004-09-30 12:09:00) [67]


> Я ожидал увидеть хуже ;)

почему?:)


Jus   (2004-09-30 12:06:00) [68]

но у меня разве медленно? там на screene  видно(написано):
FPS 16
DXTimer.interval:=50
а если интервал сделать 0, то фпс будет 70.(ну это на моей машине).


cyborg   (2004-09-30 11:01:00) [69]

Расскажу вкратце как сделать чтобы быстро работало ;)
Делаешь процедуру рисующую одну ячейку карты, например:

Procedure ShowMapXY(X,Y : Lonhint);
begin
 //тут рисуешь на большую поверхность одну клетку по координатам XY
 //Смотришь в массиве карты, что у тебя за ячейка такая и рисуешь
 //соответственный спрайт в соответствующем месте
end;

Далее, при инициализации сцены рисуешь всю карту вызывая вышеуказаную процедуру.

Затем, в процессе игры при изменении какой-то клетки, меняешь в массиве карты тип клетки и вызываешь вышеуказанную процедуру.

А в процессе игры отображаешь только одну большую поверхность карты, затем сверху неё выводи движущиеся объекты - человечки, пули, эффекты и пр.


cyborg   (2004-09-30 10:53:00) [70]

Снимки тут ftp://cyborghome.ru/ScreenShots/
Я ожидал увидеть хуже ;)


Jus   (2004-09-30 10:31:00) [71]

Только что отправил всем, кто просил. Кто его может разместить теперь в и-нете(на этой ветке ссылку)?|:(


NikeOLD   (2004-09-30 09:59:00) [72]

Mister Jus, have you ever read any books about Delphi?
There are many possibilities to save your map, e.g. file stream.

Buy or surf internet to look for a good Delphi book.

Send a screenshot please.


Omar2002   (2004-09-30 09:43:00) [73]

Мне тоже скриншотик бы не помешало посмотреть. Omar2002@front.ru


Servelat   (2004-09-30 07:59:00) [74]


> А ОН КАК РАЗЛОЖИТ В ФАЙЛЕ, ПО ОДНОМУ СТОЛБУ КАК У МЕНЯ?
> И ВАЩЕ, ЧЕРЕЗ ТХТ ЕГО ПРОЧИТАТЬ ПОТОМ МОНЖНО?

Нет, он будет писать по байтам. Такого понятия как столбец в файле нету, Блокнот просто интерпретирует символ #13 (Enter) как переход на новую строку. Соответственно, Блокнотом открыв этот файл ты ничего интересного не увидишь, там же не символы записаны '1', '2', '0', а байты (Например ячейку с кодовым номером 13 (C_BIGBLOCK=13) блокнот примет за команду перехода на новую строку). Если очень захочется посмотреть, что же там внутри файла, то открой его hex-редактором. Но если будет редактор карт, то вручную поправлять ничего не придется.
Загружать действительно так, как ты написал в [61].

> на какой адрес скинуть?)

А ты много моих адресов знаешь? :) Кидай на тот, что у меня тут прописан, просто по моему имени в любом посте щелкаешь :) .


ASoft   (2004-09-30 03:43:00) [75]

> потом незнаю где мне накачать звуков для игры [45]
Накачай из Half-Life или Контеров пока, для демки сойдет.


Jus   (2004-09-30 00:38:00) [76]


> А ОН КАК РАЗЛОЖИТ В ФАЙЛЕ, ПО ОДНОМУ СТОЛБУ КАК У МЕНЯ?
> И ВАЩЕ, ЧЕРЕЗ ТХТ ЕГО ПРОЧИТАТЬ ПОТОМ МОНЖНО?
>
> А КАК ЗАГРУЖАТЬ? ТАКЖЕ?

щас прочитал, и понял что глупость сморозил:) (write/writeln)


Jus   (2004-09-30 00:00:00) [77]


> Тут предполагается, что у тебя 10 типов тайлов, причем первый
> (который в массиве хранится как C_NONE) занесен в ImageList
> под именем 'none', второй  под именем 'ground' и т.д.


Почти, тока 'none' в ImageList не занесён, и в массиве(String) у меня было: ''- пропускает(0 нету), дальше идёт с 1,2,3 ... ну так пошло, что изначально у меня массив string, а не integer и не byte к тому же, буду исправлять как ты посоветовал в [59] !
Спасибо за помощь!


Jus   (2004-09-29 23:25:00) [78]


> ЗЫ Где скринщрт? :)

на какой адрес скинуть?)


Jus   (2004-09-29 23:23:00) [79]


> Чего-то я не помню ни одной нормальной игры, которая бы
> свои карты в текстовых файлах построчно хранила. Во-первых
> - не удобно (IMHO это способ "через жопу"), во-вторых много
> места. Я бы предложил сделать так:

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


> begin
>  AssignFile(MapFile,'Map0.nlr');
>  Rewrite(MapFile);
>  for i:=0 to 31 do
>    for j:=0 to 19 do
>      write(f, SrcMap[i,j]);
>  CloseFile(MapFile);
> end;


А ОН КАК РАЗЛОЖИТ В ФАЙЛЕ, ПО ОДНОМУ СТОЛБУ КАК У МЕНЯ? И ВАЩЕ, ЧЕРЕЗ ТХТ ЕГО ПРОЧИТАТЬ ПОТОМ МОНЖНО?

А КАК ЗАГРУЖАТЬ? ТАКЖЕ?

 AssignFile(MapFile,'Map0.nlr');
 Reset(MapFile);
 for i:=0 to 31 do
   for j:=0 to 19 do
     read(f, SrcMap[i,j]);
 CloseFile(MapFile);
end;


Jus   (2004-09-29 23:15:00) [80]


> ЗЫ Где скринщрт? :)

Я его отправил КИБОРГУ на Емайл, а он наверое спит:-) ну хош, тебе тоже отправлю?:)


Страницы:   1 2 3 4 5 6 7

Наверх

Титульная страница Поиск, карта сайта Написать письмо