Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизХочу написать игру лоде-рунер(с редактором карт)на движке DelphiX Найти похожие ветки
← →
Jus (2004-09-21 06:10) [0]Я вот хочу написать игру лоде-рунер (с редактором карт) на движке 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 сделать, например
DXSpriteEngine2, и не выводить в таймер DXSpriteEngine2.Draw, а вывести при создании формы после создания всех объектов которые нужно вывести 1 раз?или так неполучится?:(
2) Или как оно делается правильно, ведь кроме лестниц и других объектов будут ещё и всякие монстры, которых надо "отображать" в таймере и FPS упадёт снова?
3) Как повысить FPS?!
← →
Jus (2004-09-21 06:14) [1]"Отображаться"(DXSpriteEngine.Draw;) должны в таймере все объекты постоянно, на сколько я знаю, но как сделать чтоб и объекты были все и FPS в норме?(
← →
NikeOLD © (2004-09-21 07:22) [2]А методы спрайта DoMove ты перегрузил? И не забудь про inherited.
Кстати, когда соберешся продавать свое творение не забудь про авторские отчисления владельцам зарегистрированной марки Lode-Runner, если патент уже не закончился. :) Это будет дорого.
← →
Jus (2004-09-21 07:41) [3]
> Кстати, когда соберешся продавать свое творение не забудь
> про авторские отчисления владельцам зарегистрированной марки
> Lode-Runner, если патент уже не закончился. :) Это будет
> дорого.
:)
Я назову Lode-Runer по другому
← →
Jus (2004-09-21 07:44) [4]
> А методы спрайта DoMove ты перегрузил? И не забудь про inherited.
что значит перегрузка в методах DoMove? там ничего особенного.
про inherited не забыл
← →
Jus (2004-09-21 08:02) [5]Щас проверил. На экране 400 объектов. FPS=1;
На моей машине
Pentium4C/2600, 512Ram, geForce4 128mb.
← →
cyborg © (2004-09-21 08:25) [6]Тыт надо хитро делать, два варианта:
Обновлять только те места, где картинка изменялась, либо создать одну большую поверхность, куда нарисовать уровень, и при изменении какого-то участка, перерисовать только этот участок. А на экран выводить эту большую поверхность. В танчиках я так сделал, работает быстро, как вы убедились в той ветке. Если прямо перерисовывать всю карту, будет слишком медленно, в танчиках это 900 клеток земли нужно было бы рисовать каждый кадр, плюс ещё лес сверху.
← →
OSG (2004-09-21 08:27) [7]А ты используй не DelphiX, а PowerDraw3 (http://turbo.gamedev.net) или Omega (http://www.delphisanctuary.com). Они получше будут
← →
Jus (2004-09-21 08:56) [8]
> OSG (21.09.04 08:27) [7]
> А ты используй не DelphiX, а PowerDraw3 (http://turbo.gamedev.net)
> или Omega (http://www.delphisanctuary.com). Они получше
> будут
PowerDraw3 я скачал давно, но не могу инфу достать по ней.
← →
Jus (2004-09-21 09:10) [9]
> Обновлять только те места, где картинка изменялась,
1)т.е. как? экран же полностью обновляется по таймеру!? Было б конечно хорошо если б знать как!:)
> либо создать одну большую поверхность, куда нарисовать уровень,
> и при изменении какого-то участка, перерисовать только этот
> участок. А на экран выводить эту большую поверхность.
Ведь дело в том, что не в самих изображениях спрайтов дело, а в объектах. Когда их много, то начинает "тормозить". Ведь если не выводить объекты "по отдельности"(а иначе никак), то как ИГРОК будет взаимодействовать с ними. Если я чёто не понял, объясните по подробнее.
← →
Jus (2004-09-21 09:11) [10]Ах да, я наверное не прав на счёт последего, ну тогда и на счёт "большой поверности..." если можно по подробнее...
← →
Jus (2004-09-21 09:21) [11]
> Обновлять только те места, где картинка изменялась,
А где надо прописывать те места которые надо обновлять и вообще чё тогда в тимере написать?
← →
Jus (2004-09-21 09:26) [12]Примерно представляю, но помогите кодом где все спрайты рисуются в один большой?
> В танчиках я так сделал, работает быстро, как вы убедились
> в той ветке. Если прямо перерисовывать всю карту, будет
> слишком медленно, в танчиках это 900 клеток земли нужно
> было бы рисовать каждый кадр, плюс ещё лес сверху.
кстати, я твои танчики не увидел, страница не может открытся.(Ошика 404). Но я еще раз попробую, там есть исходники?
← →
cyborg © (2004-09-21 09:27) [13]Моё мнение такое (может же у меня быть своё мнение :), никакие таймеры в игре не нужны, это раз. Два - дельфикс можно использовать только для просмотра примеров, ну не удобен он, не понравился мне, я даже честно два раза примеры смотрел :).
Я тебе говорил, попробуй мою библиотеку, гораздо легче и удобнее Дельфикса ;). За основу можешь взять пример "Мухи", в игровой сцене очисти код, и пиши свой. Можно даже меня спрашивать, чего там непонятно будет ;).
И главное, начни сначала с простого, за написание игры сразу не берись. Для начала можно сделать просто вывод карты на экран.
← →
cyborg © (2004-09-21 09:28) [14]Танчики я уже убрал.
← →
Jus (2004-09-21 09:40) [15]никакие таймеры в игре не нужны, это раз
А как будет делатся анимация, через фор чтоли)?
> И главное, начни сначала с простого, за написание игры сразу
> не берись. Для начала можно сделать просто вывод карты на
> экран.
Я попробую разобраться в твоём движке, но досадно DelphiX забросить.
Игра то по идее в голове готова, но единственная проблема, которую я в этой ветке расписал. В игре я всё продумал, чё да как, и анимацию прикольную и объекты интересные( всего 42 различных объекта) продумал весь код до мелочи, но произошла загвозтка такая в этом.
Cyborg:
Еслиб ты мне помог в...
> > Обновлять только те места, где картинка изменялась,
>
> 1)т.е. как? экран же полностью обновляется по таймеру!?
> Было б конечно хорошо если б знать как!:)
я был бы рад, а потом бы может быть перешёл бы на твой движок и не возвращался бы к делфиХ, ведь цель так близка, неохота перестраиватся перед "финешем", помогите!
Благодарю)
← →
Jus (2004-09-21 09:43) [16]
> Танчики я уже убрал.
Жаль
Можешь положить?+ исходники (чисто для обучающего примера) или на мыло,плиз!
← →
cyborg © (2004-09-21 09:56) [17]Исходников танчиков не будет ;).
Сейчас могу только скриншот показать
http://www.cyborghome.ru/images/screenshot/Thanchiki2/Thanchiki2.jpg
Рисунок 175 килобайт
← →
Jus (2004-09-21 09:56) [18]щас скачаю на дискету твои длл и экземпли и возьму на работу, там поразбираться будет думаю время, сегодня с 20:00 на работу. Часовой пояс у меня как в Екатерибкрге +5:00. А сейчас спать:)
← →
NikeOLD © (2004-09-21 09:58) [19]
> Jus (21.09.04 07:41) [3]
Дело не в названии, а в идее. Запатентовано было и название и идея. :(
← →
Jus (2004-09-21 10:03) [20]NikeOLD © (21.09.04 09:58) [19]
А это будет какбудто моя идея, похожая, а про Лоде-Рунер я не знал. и назову её "..."!(пока ещё не придумал. Блин, как назвать!
Игры нету, а название уже придумываю:))
← →
Jus (2004-09-22 07:54) [21]Вот скажите мне пожалуйсто, правильно ли я вообще делаю?:
Type
Tenemy=class(...
procedure DoMove(...
procedure DoCollision(...
public
Constructor Create(...
end;
var
enemy:array[0..10] of TEnemy;
...
Constructor TEnemy.Create(...
begin
Inherited Create;
Image:=...
x:=..
....
end;
В Form1.OnCreate пишу создание enemy
(А можно ли создавать сдесь TEnemy? т.е. разницы нету(на скорость ФПС)? Я в одном примере увидел что объекты создаются в Form1.OnShow/!?/var i:integer;
begin
Randomize;
For i:=0 to 10 do begin
enemy:=Tenemy.create(...);
enemy.x:=random(800);
enemy.y:=random(600);
end;
end;
В Dxtimer.onTimer всё нормально как и во всех примерах
В Form1.OnCloseFor i:=0 to 10 do begin
enemy.free;
end;
Процедурыprocedure DoMove(...
иprocedure DoCollision(...
описывать не стану... незачем.
Если я правилно делаю, то почему же FPS падает, причём значительно? Если нет то где ошибка?
← →
Jus (2004-09-22 07:58) [22]
> For i:=0 to 10 do begin
> enemy.free;
> end;
enemy[i].free;
извеняюсь,писал прям тут
← →
Jus (2004-09-22 08:42) [23]Вот ещё такой вопрос всплыл по ходу. Где ФПС будет выше, если создать один и тот же Тобъект 5 раз, или создать 10 разных Тобъектов?(или без разницы)?
← →
Nox © (2004-09-22 11:26) [24]Не знаю, что это за игра, но как я понял, это, что-то типа аркады.
Когда я делал свою аркадку, я воспользовался таким "детским" методом:
1. В редакторе какрт создать уровень со всеми обьектами. Сохранить этот уровень как несколько массивов. Массивы 2-х мерные, х и у - координаты поля, а информация string - это какой обьект расположен в данном месте.( obj[x,y]:="stul").
2.После запуска карты, все обьекты прорисовываешь один раз, а потом по мере надобности изменяешь их местоположение и содержание по их личной бирке.
В таймере у тебя будут все механизмы перемещения обьектов, и что бы воспользоваться одним из способов перемещения какого либо обьекта ты должен будешь выполнить условия: что бы твои Х и У были равны х и у. После их выполнения идет задача параметров, типа - куда переместить, или что сделать...
Пример. если пуля летит в монстра, и когда ее Х и У(от * до *) равны х и у монстра, в таймере, так как выполнены были условия совпадения, проверяют, что это за мостр, и что он должен делать...
Я сам занимаюсь D. еще мало и может чего не понял в вопросе... но попытаться помочь - стоило...
← →
breakmaster © (2004-09-22 21:32) [25][20]
назови ее "НЕ ЛодРанер"
← →
Darthman © (2004-09-22 23:31) [26]Что касается PowerDraw, то мой тебе совет использовать последнюю версию powerdraw 2 Deluxe. Она будет стабильнее и дх только 7-й требует.
← →
Omar2002 (2004-09-22 23:53) [27]х3 Ну блин че за косяки. Я в своей гаме вывожу на экран примерно 1000 спрайтов, только немного не так
а вот так:dxImageList1.Items[61].DrawRotateAlpha(DXDraw1.Surface,trunc(30*(XX-YY)+scx*60),trunc(15*(XX+YY)+scy*30),60,75,0,0 ,0,0,150+trunc(sqr(Anim1-18)/3))
← →
Omar2002 (2004-09-23 00:00) [28]так у мя рисутся максимум один спрайт за раз, а остальные выводятся так:
dximagelist2.Items[22].Draw(Dxdraw1.Surface,X,Y,0)
И при этом при всем еще рисуются всякие примитивы(прямоугольники). FPS вобще не страдает - 56-59
Конфиг компа:
Athlon 800 512SDRAM GeForce FX 5200 - не так уж и модно на сегодняшний день. С другой видяхой - RivaTNT 2 Pro 16 Mb - у мя было в среднем 30 FPS.
Да кстати - спрайты все 60х75 Могу кинуть для показа дему, если надо.
← →
Omar2002 (2004-09-23 00:03) [29]Извиняюсь - ща пересчитал - примерно 700 спрайтов
← →
Jus (2004-09-23 06:08) [30]
> Nox © (22.09.04 11:26) [24]
> Я сам занимаюсь D. еще мало и может чего не понял в вопросе...
> но попытаться помочь - стоило...
Я примерно так же и делаю.
Но всё равно спасибо!)
← →
Jus (2004-09-23 06:10) [31]
> Omar2002 (23.09.04 00:00) [28]
> Да кстати - спрайты все 60х75 Могу кинуть для показа дему,
> если надо.
Да, если не трудно исходник.
← →
Jus (2004-09-23 06:13) [32]
> breakmaster © (22.09.04 21:32) [25]
> [20]
> назови ее "НЕ ЛодРанер"
Хорошая идея!!!) так и сделаю!
← →
Jus (2004-09-23 09:11) [33]УРА!!! FPS=70 на экране 400 объектов!!!!(в смысле спрайтов)
Непонимаю, почему раньше так небыло, делал также, но не совсем.
Есть у меня пример программы (скачивал как-то), где при нажатии на Ctrl создаётся корабль в нижней части на всю ширину экрана, а при нажатии Enter создавались бомбы ТБомб которые падали с верху в низ и при колизион уничтожались(Всё при DXTimer.Interval:=0 >[ФПС=32 и меньше]).
И вот, я ползовался этим же Unit1.pas толко всё лишнее постирал из него и сделал как "заготовка" и писал в нем код. А щас создал всё по новой, и всё окей! Хотя тот код в "заготовке" ничем не отличается от моего!?:)
← →
Jus (2004-09-23 09:12) [34]Ура!!! теперь могу смело делать игру "Не ЛодеРунер" дальше!)
← →
Jus (2004-09-24 23:19) [35]Ждите к на следующей неделе новую супер игру (скорее демо)"Не лоде рунер", так она и будет называтся! Сделано пока 25%. На "игрока" скажем, уделил свыше 50 разных спрайтов(на всякие там лесинки, ходьбу, приседание, удары и т.д), графику рисовал в паинте, хотел в кореле, но получилось лучше некуда. Уже все основные объекты готовы. Игра расчитывается на двоих, и в отличии от "лоде рунера" будет более интересней и играбельней. В игре будут "сюрпризы" - не скажу, ато будет не страшно:), Будет по задумке JetPac(кто незнает - реактивный ранец), а может нет, ещё не решил, но в демке точно небудет, и много интересного. Плюс редактор карт. Кнопок для игрока около 10 ито 6 основных.
← →
Jus (2004-09-24 23:22) [36]Вот незнаю как мне лучше сделать? Карту на одном экране, чтоб было видно всё или больше екрана, если больше то для двоих игроков надо буде экран делить (это помоему усложнит мою задачу!).
← →
cyborg © (2004-09-25 10:39) [37]Посмотрим ;). Карту на одном экране делай, чтобы всё видно было, что, где и куда бежит.
Куда там 10 кнопок? Отсилы 6 нужно.
← →
cyborg © (2004-09-25 10:44) [38]Кстати, разрешение экрана 1024х768 лучше сделай, чтобы много помещалось и красиво было.
← →
Jus (2004-09-25 12:00) [39]
> Куда там 10 кнопок? Отсилы 6 нужно.
Кнопки:
основные:
1) влево
2) вправо
3) вниз
4) вверх
5) пробел - (прыжок(если в прыжке ещё раз пробел, то jetpack));
6) Ctrl - удар кувалдой по кирпичам (в направлении куда смотрит. Если рядом со стеной, то рушит стену, если рядом нет стены а на "земле" кирпич то пробивает землю.
Дополнительные:)
//ну кувалда, не кувалда, смотря какое оружие, предмет выбереш. Если шотган, то стрелять будет. Если телепорт - телепортируется.
7)8) Z,X по умолчанию удар кувалдой влево вправо.
9)10) [,] - менять оружие;
11) Tab - по умолчанию teleport (Есть порт из которого появляется игрок в начале, и когда погибает, туда он телепортируется тоже(тратится 1 батарейка);
12) F12 - самоуничтожение;
Может ещё забыл чё. Ну как тут 6 кнопками обойтись?
Зы: как сделать, чтоб можно было игроку расположение кнопок менять в меню? Например присвоить Button1 не пробел, а например Q?
← →
Jus (2004-09-25 12:01) [40]Небольшая техническая проблема произошла! Вырубили свет на секунду какраз тогда, когда я нажал сохранить всё, Unit1.pas уцелел, а вот *.dpr пострадал. Придётся восстанавливать, а в DXImaeList загружать все картинки и переименовывать каждую как было, на это уйдёт не больше часа, а может быть получаса, это не проблема, но всё равно не приятно!:(
Страницы: 1 2 3 4 вся ветка
Форум: "Игры";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.039 c