![]() |
| ||
|
|
Новости |
Поиск |
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?!
Servelat (2004-09-29 23:06:00) [81]
> После чего Project1 не отвечает, и ничего не сохраняет.
Ты чего, вчера родился что ли? Ставишь брейкпоинт куда-нибудь на AssignFile(...), и дальше F8. Отладка - великая вещь.
> Подскажите как мне лучше сохранить карту?
> Решил в текстовом файле сохранить
Чего-то я не помню ни одной нормальной игры, которая бы свои карты в текстовых файлах построчно хранила. Во-первых - не удобно (IMHO это способ "через жопу"), во-вторых много места. Я бы предложил сделать так:
const
C_NONE = 0; //пустая клетка
C_GROUND = 1; //земля
C_BLOCK = 2; //кирпич
//и так далее
...
var
ScrMap:array[0..31,0..19] of byte;
//почему byte? так как вряд ли у тебя больше 256 типов земли будет;
//если все же будет - поставь word вместо байта
MapFile: file of byte;
i,j: integer;
...
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;
i и j вместо твоих переменных я юзал для краткости. Кстати, в каком порядке сохранять значения в файл я большой разницы не вижу, поэтому у меня внешний цикл до 31, а внутренний до 19. Ну и массив я объявил с 0, как настоящий программист :) . На самом деле, так удобнее, но не принципиально.
В этом случае размер файла карты становится намного меньше (по 1 байту на каждую ячейку, у тебя было явно больше).
Но, видимо, строки хранящиеся в массиве служили как имена картинок для отображения карты? Это тоже не проблема:
const
Names: array [0..9] of string=('none', 'ground', 'block', ...)
Тут предполагается, что у тебя 10 типов тайлов, причем первый (который в массиве хранится как C_NONE) занесен в ImageList под именем 'none', второй под именем 'ground' и т.д. Тогда отрисовка ячейки с координатами (x,y) будет такой:
DXImageList.Find(Names[SrcMap[x,y]]).Draw(//куды тебе надо...);
Разумеется, все вышесказанное всего лишь совет, не является обязательным к исполнению и единственно правильным решением.
ЗЫ Где скринщрт? :)
Jus (2004-09-29 22:31:00) [82]Подскажите как мне лучше сохранить карту?
ScrMap:array[1..32,1..20] of string;
MapFile:TextFile;
Var MapFx,MapFy:integer;
Я делаю к примеру так(Решил в текстовом файле сохранить)
if IsButton3 in Form1.DXInput.States then begin // кнопкой F12
AssignFile(MapFile,'Map0.nlr');
Rewrite(MapFile);
For MapFy:=1 to 20 do begin
For MapFx:=1 to 32 do begin
WriteLn(MapFile,ScrMap[MapFx,MapFy]);
end;
end;
CloseFile(MapFile);
end;
После чегоProject1 не отвечает, и ничего не сохраняет.
(Это если нажать через делфи, а если просто запустить *.ехе из папки то нормально, и сохроняется всё) ?!
Jus (2004-09-29 20:10:00) [83]Уже отправлено!
Jus (2004-09-29 19:59:00) [84]Была ошибка сервера, не мог в интернет залезть!(
Тока щас соединился нормально, ато "Невозможно отобразить страницу"(
> cyborg © (29.09.04 14:55) [54]
> присылай
Щас прям отправлю на cyborg@hotbox.ru, ок!
Servelat (2004-09-29 17:31:00) [85]Ну и где обещанный скрин?
cyborg (2004-09-29 14:55:00) [86]присылай
Jus (2004-09-29 13:55:00) [87]Уже второй раз пытаюсь отправить сообщение и в результате получаю:
Internal Server Error:(
> cyborg © (29.09.04 13:26) [52]
> Покажи.
Я не умею:)
Может я тебе скину на мыло, а ты его от моего имени в этой ветке опубликуеш?:) согласен?
cyborg (2004-09-29 13:26:00) [88]Покажи.
cyborg (2004-09-29 13:25:00) [89]покажи.
Jus (2004-09-29 13:17:00) [90]Кстати могу уже показать скриншот:)
Jus (2004-09-29 13:15:00) [91]
> Jus (28.09.04 22:03) [46]
>
> > Jus (24.09.04 23:19) [35]
> > Ждите к на следующей неделе новую супер игру (скорее демо)"Не
>
> > лоде рунер", так она и будет называтся!
>
> Извеняюсь за поспешные выводы. Дату выхода переношу на 15.10.04
> примерно, т.к. по стечению обстоятельств я завтра уеду на
> неделю в Самару по делам, вернусь обратно 05.10.04!
> :(
Поездка отменяется, блин, начальник не отпускает, хотел на машине туда и обратно, но придётся на самолёте на выходных (так быстрее). О блин, жизнь! Только уже не мне лететь, а другу.
> МЯУ (29.09.04 11:36) [48]
>
> > Jus (28.09.04 16:09) [45]
>
>
> а зачем кувалдой по кирпичу бить?
> я в "лоде рунер" не играл, можно кратко изложить суть игры.
>
> зы: рисовать помог бы, но, блин, не умею :) сам мучаюсь.
Ну, чтоб разбить кирпич:)
Объекты все у меня 32х32 как я уже писал, есть кирпичи, они могут быть как стенами, так и полом и потолком. К примеру тебя окружают со всех сторон монстры... быстро выбираеш кувалду, пробиваеш кирпичный пол, и сматываешся. Ну можно пристрелить их если ружьё и патроны есть:)
МЯУ (2004-09-29 11:36:00) [92]
> Jus (28.09.04 16:09) [45]
а зачем кувалдой по кирпичу бить?
я в "лоде рунер" не играл, можно кратко изложить суть игры.
зы: рисовать помог бы, но, блин, не умею :) сам мучаюсь.
Servelat (2004-09-29 07:49:00) [93]
> Извеняюсь
извИняйся через букву "И" плиз ;).
Jus (2004-09-28 22:03:00) [94]
> Jus (24.09.04 23:19) [35]
> Ждите к на следующей неделе новую супер игру (скорее демо)"Не
> лоде рунер", так она и будет называтся!
Извеняюсь за поспешные выводы. Дату выхода переношу на 15.10.04 примерно, т.к. по стечению обстоятельств я завтра уеду на неделю в Самару по делам, вернусь обратно 05.10.04!
:(
Jus (2004-09-28 16:09:00) [95]У меня в " Не лоде рунере"(не в редакторе:)) по массиву карту заполняли случайные объекты, ну чтобы мне для наглядности смотреть объекты. Сейчас почти закончил редактор карт(ошибок нету) !, остались мелочи( меню, новая карта, открыть карту, сохранить карту как...). Теперь сделаю карту и буду тестить плэера и объекты на взаимодействия "с окружающей средой".
Два дня потратил на отрисовку объектов (32х32) как надо, и их анимацию, потом незнаю где мне накачать звуков для игры :( , у меня их в наличии с дюжину:
ходьба 1 плаера"топ-топ1";, где достать?(
ходьба 2 плаера"топ-топ2";
по лестнице1, по лестнице2;
ходьба паука-мины,
взрыв,
удар кувалдой по кирпичу,
падает1,
падает2,
умер1,
умер2,
турель,
пресс,
подобрал жизнь+...
а надо ещё шотган, телепорт и т.д.
...и чтоб много не весили?)
/////////////////////////////////////////////////////////
P.S.
Кстати сделано из 60 задуманных объектов нарисовано 45 шт. "и из 88 возможных(т.к. редактор и его панель редактирования расчитана на 88 объектов)"
Всего картинок (объектов с анимацией + те которые не для редактирования, такие как взрыв и прочее) получилось 219шт. У одного только плеера 45шт, ито надо около 60 или чуть больше . Кто нибудь хочет помочь дорисовать остальные объекты? :)
Jus (2004-09-25 16:33:00) [96]
> Это всё тебе знаки свыше, бросай ты этот DelphiX!
> А ты всё никак не поймёшь.
Всё равно его не брошу - потому что он хороший!:)
> Servelat © (25.09.04 12:30) [42]
> Если тока .dpr пострадал, то нафига какие-то имейдж листы
> перегружать и т.п.?
Уже всё восстановлено.
> Давай пиши, интересно поглядеть, что выйдет. Успеха!
Спасибо!)
cyborg (2004-09-25 15:10:00) [97]
> [40] Jus (25.09.04 12:01)
Это всё тебе знаки свыше, бросай ты этот DelphiX!
А ты всё никак не поймёшь.
;)
Servelat (2004-09-25 12:30:00) [98]2 Jus [40]
Если тока .dpr пострадал, то нафига какие-то имейдж листы перегружать и т.п.? Если .dfm файл цел, то все картинки с именами уже там. Содержимое .dpr файла угадать очень легко, зная, что ты пишешь юзая DelphiX, там все по умолчанию. Так что в случае утери только .dprфайла все восстанавливается максимум за 3 минуты.
Давай пиши, интересно поглядеть, что выйдет. Успеха!
Jus (2004-09-25 12:18:00) [99]
> cyborg © (25.09.04 10:44) [38]
> Кстати, разрешение экрана 1024х768 лучше сделай, чтобы много
> помещалось и красиво было.
Так то красивее будет, но игок чоторого я прорисовывал до каждого пикселя на этом разрешении будет маленький на 15"мониторе (у меня например 15"ЖК монитор), и не разглядеть мою старательную прорисовку объектов 32х32. Я год учился в художественной школе давно, потом бросил:) // это я так к слову)
Ну наверное так и будет - 1024х768.
Jus (2004-09-25 12:01:00) [100]Небольшая техническая проблема произошла! Вырубили свет на секунду какраз тогда, когда я нажал сохранить всё, Unit1.pas уцелел, а вот *.dpr пострадал. Придётся восстанавливать, а в DXImaeList загружать все картинки и переименовывать каждую как было, на это уйдёт не больше часа, а может быть получаса, это не проблема, но всё равно не приятно!:(