![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хочу написать игру лоде-рунер(с редактором карт)на движке DelphiX [Delphi, delphiX, Windows]
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]
> ЗЫ Где скринщрт? :)
Я его отправил КИБОРГУ на Емайл, а он наверое спит:-) ну хош, тебе тоже отправлю?:)