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

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

DoCollision B DelphiX [Delphi, DelphiX, Windows]


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

Аццкий_рыцарь:) ©   (2005-12-29 14:07:00) 

когда спрйт анимируется, то DoCollision происходит только на первом его кадре. А мне нужно что б на всех кадрах происходило колижн ХЕЛП!


cyborg   (2006-01-05 09:57:00) [141]

>>[43] Cash ©   (04.01.06 12:59)
>>Ага, есть такое. Поставь у DxDraw.Options параметр doSystemMemory
>>в true, при большом количестве спрайтов это облегчает работу,
>>т. е. поднимает FPS.

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


Cash   (2006-01-04 21:37:00) [142]

Аццкий_рыцарь:)   (04.01.06 21:09) [45]:
Да. Берешь DxDraw.Surface.Canvas (по моему),
и делаешь с ним что хошчь! Даже текст выводи!

JUS ©   (04.01.06 21:16) [46]:
... Выводи из массива через For. ...
Поправлю, маленечко!, не через for, он медленный, а через while!
(заменяй все for на while, а goto на repeat, выиграешь
в производительности!)

Аналог цыкла for на манер while:

while i < Need do begin
 <Чёнибудь делаем>
 inc(i);
end;


Аналог goto на манер repeat:

// тут без титула не обойтись
Label
 m;
begin
m:
 <Чёнибудь делаем>
 if i < Need then goto m;
end;

// а так это на repeat выглядит
begin
 repeat
   <Чёнибудь делаем>
 until i >= Need; // замечу, что именно >=, потаму, как (not (>=)) = <.
end;


JUS   (2006-01-04 21:21:00) [143]


> Аццкий_рыцарь:)   (04.01.06 21:09) [45]
> немного помогло :)
>
> ну-с с глюками как бы разорался :) пасиба!
>
> меня еще одна проблемка волнует... а можно на DXDrav рисовать?
>  через канвас? мне надо чтоб картинка мертвого монстра рисовалась
> на спрайте бекграунда. Это можно сделать?

Рисуй так же как на канве, тока че там писать надо не помню, вроде...
Form1.DXDraw1.Surface.Canvas... а дальше думаю разберешся
А нафига тебе там рисовать на канве, нарисуй этого скелета в BMP и загрузи спрайт (будет как фон), только Z поставь меньше чем у всех своих монстров и др.


JUS   (2006-01-04 21:16:00) [144]


> Аццкий_рыцарь:)   (03.01.06 20:26) [41]
> Эээээ со столкновениями я с горем пополам разобрался  (вырубил
> пиксельчек и зделал колижн при столкновениях рамок спрайтов,
>  а рамки сделал "вакурат" прикасающимися к изображению спрайтов)
>
> НО ВОТ С ГЛЮКАМИ! билна наверное  этот Хируоки Хори специально
> сделал чтоб после вывода больше 40 спрайтов, ФПС падали

1.Какие еще рамки "вакурат"? Ты делай чтоб размеры спрайта были равны размеру самого спрайта(они вымерятся автоматически) ниче подгонять в аккурат не надо.
Width := Image.Width;
Height :=Image.Height;
2. ниче подобного, я ж тебе писал в другой ветке как надо спрайты выводить, у меня на экране >700 спрайтов и всё ок. И не используй этот goto. Создай массив скажем для 100 монстров, пускай они где хотят там и появляются, это ты сам сделаеш, и выводи как я писал тебе, в другой ветке.
Выводи из массива через For.
Вот ссылка на прошлую ветку
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1135469233&n=9

Monstr:array[0..99] of TMonstr;
fMonstr:integer;

...
В каком нибудь таймере поставь создание монстров
For i:=0 to 99 do begin
  begin
fMonstr:=fMonstr+1;
Monstr[fMonstr]:=TMonstr.Create(DXSpriteEngine.Engine);
Monstr[fMonstr].Image:=DXImageList.Items.Find('Primer');
Monstr[fMonstr].Width:=Monstr[fMonstr].Image.Width;
Monstr[fMonstr].Height:=Monstr[fMonstr].Image.Height;
Monstr[fMonstr].X:=XX;
Monstr[fMonstr].Y:=YY;
Monstr[fMonstr].Z:=ZZ;
end;


Если монстра завалил, то fMonstr:=fMonstr-1;
Если fMonstr:=100 или больше то не создает.
Тока не забывай после его гибели отчищать память или будут тормоза.

Не пытайся доделать игру прям щас, порассматривай несколько примеров, поэксперементируй. Во многих примерах спрайты создаются так же как ты их создаеш, попробуй создать как я, и всё будет ок.)))
Пока отложи игру и поэксперементируй с выводом не анимированных спрайтов, потом с коллизиями, потом с анимированными спрайтами. Ничего трудного. И gotoне трогай!!!


Аццкий_рыцарь:)   (2006-01-04 21:09:00) [145]

немного помогло :)

ну-с с глюками как бы разорался :) пасиба!

меня еще одна проблемка волнует... а можно на DXDrav рисовать? через канвас? мне надо чтоб картинка мертвого монстра рисовалась на спрайте бекграунда. Это можно сделать?


JUS   (2006-01-04 14:41:00) [146]

Используй For

чтоб добавить ещё капельку производительности напиши код в Form1.onActivate или как уж там

DoubleBuffered:=True;

помоему так.))


> Cash ©   (04.01.06 12:59) [43]

Respect)))


Cash   (2006-01-04 12:59:00) [147]

Аццкий_рыцарь:)   (03.01.06 22:14) [42]:
Ага, есть такое. Поставь у DxDraw.Options параметр doSystemMemory
в true, при большом количестве спрайтов это облегчает работу,
т. е. поднимает FPS.
А еще, ижели в полноэкранном режиме, и графика вся в 256 цветах,
то поставь 256 цветов в свойствах DxDraw тоже(DxDraw.Display.BitCount).
Так же, если в полноэкранном режиме, в DxDraw.Options поставь:
doWaitVBlank -> false
doCenter -> false
doDirectX7Mode -> false
doRetainedMode -> true

Если производительность будет падать, попробуй вариации этих параметров.
Бывало, у меня при выводе 700 спрайтов FPS составляло 89 - 92.
Это с такими настройками.

Аццкий_рыцарь:)   (03.01.06 20:26) [41]:
А от goto избавился?


Аццкий_рыцарь:)   (2006-01-03 22:14:00) [148]

О! тут удалось сохранить примерно 90 фпс при выводе где-то 70 спрайтов! я в свойствах спрайта монстра поставил systemmemory=true.


Аццкий_рыцарь:)   (2006-01-03 20:26:00) [149]

Эээээ со столкновениями я с горем пополам разобрался  (вырубил пиксельчек и зделал колижн при столкновениях рамок спрайтов, а рамки сделал "вакурат" прикасающимися к изображению спрайтов)

НО ВОТ С ГЛЮКАМИ! билна наверное  этот Хируоки Хори специально сделал чтоб после вывода больше 40 спрайтов, ФПС падали


Cash   (2006-01-03 19:20:00) [150]

JUS ©   (03.01.06 18:07) [36]:
Это точно!!! :D
JUS ©   (03.01.06 18:16) [37]:
Коллега, мы нашли общий язык. Респект!

Аццкий_рыцарь:)   (03.01.06 18:58) [38]:
Сорри, я не могу посмотреть твой код, дела.... сессия....
ботанничество короче! :)))
В замен goto можно использовать while цыкл, или, если
пыть по ближе к goto, использовать repeat.
Если что, могу пояснить - как.

Мож, у тебя из за goto все рамсы со спрайтами? Мож, конечно, и нет.

А от глючности со столкновениями можно избавиться написанием
своей процедурки обработки столкновений, на приметивах.
Если что, то и это объясню.

А япошку этого завут (который DelphiX сделал, если я правильно помню) Хируоки Хори (Hiroyuki Hori). Этакий fo kso (fo kusotore) из японии


Аццкий_рыцарь:)   (2006-01-03 19:06:00) [151]

Кстати, оно почему-то само, только количество спрайтов стает больше сорока, снижает ФПС до 50 ... возникает смутное сомнение, что это делается специально спрайт енжином делфиХ. Наверное цыфру сорок можно изменить если покопаться?


Аццкий_рыцарь:)   (2006-01-03 18:58:00) [152]

2JUS в самом деле я кодил с самого начала на ВБ :)

Так что, никак нельзя седать что б не глючила игра? :((( И с коллизиями тож ниче не сделаешь?


JUS   (2006-01-03 18:16:00) [153]

Ну в принципе ты прав что омега круче, я не отрицаю. Но раз делфиХ для обучения, пускай он научится сначала на ней спрайты крутить и коллизю. Кстати хоть и директХ7, то все равно для начала хватит, пусть хоть одну игрушку сделает на делфиХ, чем прыгать из крайности в крайность. И на ДиректХ5 игрушки типа варкрафта и др. были интересные. Для начала ему много не надо. И такой движек потянет, если код будет грамотный. А когда закончит писать, то может к тому времени этот японец, как там его, выпустит DelphiX с DirectX9. и будет круче омеги:-)))


JUS   (2006-01-03 18:07:00) [154]

Тебе дай волю, так ты можеш до х** наговорить


Cash   (2006-01-03 17:54:00) [155]

JUS ©   (03.01.06 13:20) [33]:
... Можно подумать что её создали специально  ...
Нет, когда Хируоки ее содавал, DirectX7 был крутой штукой.
Создана эта либа не для обучения, а для того, чтобы показать
какой этот япошка крутой! Потом ее предназначение стало - обучать.
Обучать, как спрайты делать, как - коллизии создавать, как из
программного кода сделать вируальный мирочек.
"НИЧЕГО БОЛЕЕ МЕНЕЕ ПУТНОГО НА НЕЙ НЕ СДЕЛАЕШЬ!" (это не мои слова!)
Изучив проект GDK Omega и при наличии неисскуственного разума
можно легко и непринужденно понять, как делать вещи на DirectX 8.1
и выше. (8.1 или 7, для меня выбор уже очевиден)
Не, начинал я тоже с DelphiX, но - две недели, не больше,
стало понятно, и на ум пришло это изречение (большими буквами).
Crimson Land, тот вообще писался на VC++ 6,
(могу дать полный отчет проги "UnPackFx",
которая умеет определять компилятор).

Cash, тебе же было сказано
> grouzd[E]v ©   (29.12.05 20:14) [8]

Ага, пмню :)))
Ща, еще кофеинчику приму, и постараюсь что нибудь ответить еще :D :D :D

---------------------------------------------
Да ну, мне вообще маленько по**** кто на чем пишет,
мое дело дать совет или рекомендацию. :)))
---------------------------------------------
Хотелось бы мне отсылать других податьше,
да яб тогда вообще в каждом поте говорил:
"Бросайте этот **** Delphi!, он для обучния!
Переходите на VC++ 7, она для развития" :)))
(типа это в рифму с прошлым) :)))


JUS   (2006-01-03 13:36:00) [156]


> Аццкий_рыцарь:)

Ты наверное раньше бейсик изучал?
Щас смотрел твой код, забудь про goto, очень может запутать, пытайся обходиться без goto. И еще код трудно читать с этим goto. Можно все проще написать и компактнее. И ограничение хоть есть у монстров? Я запустил "игру", вышел на 10 мин., пришел, а их наверное 100тыс. на экране образовалось в одной куче вокруг меня и все чето хотят.)


JUS   (2006-01-03 13:20:00) [157]


> Cash ©   (03.01.06 08:37) [32]


> Забудь DelphiX, он для обучения. Переходи на Omega, она
> для развития!

Cash, тебе же было сказано


> grouzd[E]v ©   (29.12.05 20:14) [8]


> Блин, не понял ты меня - я имел ввиду что нефиг все время
> народ отсылать к другим библиотекам, пущай пишут на чем
> хотят


И если ты так решил что DelphiX для обучения, это еще не значит что она для обучения. Для обучения чего???) Библиотека есть библиотека, при чём тут для обучения. Можно подумать что её создали специально для обучения:)))


Cash   (2006-01-03 08:37:00) [158]

Аццкий_рыцарь:)   (03.01.06 02:41) [31]:
А ты видать все посты читать не любишь!!!!
Я же вторым постом отписал, то, что гораздо лучше DelphiX.
На Омеге еще и 3D сделать можно, это самый лучший GDK из
всех, мной увиденных!

А на DelphiX с этими двумя проблемами тебе не справиться.
Переписать коллизию будет если не трудно, то очень трудно.
(сам пытался переписать, после чего забросил DelphiX подальше)

А спрайты будут вести себя так, как их напишут. Напишут с глюкама,
спрайты будут глючить.
Вон там есть еще несколько ответов по Омеге.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132021552&n=9

-------------------------------
Забудь DelphiX, он для обучения. Переходи на Omega, она для развития!


Аццкий_рыцарь:)   (2006-01-03 02:41:00) [159]

Вообще-то полазив по инету, понял что ГЛСцен для 3Д сделан, так что если вы мне поможете усовершенствовать игру чтоб спрайты не глючили,и коллизия происходила на всех кадрах, буду ОЧЕНЬ вам благодарен! ибо это последние две проблемы, которые я не могу решить сам. А дальше разберусь :) НАДЕЮСЬ НА ВАШУ ПОМОЩЬ


Аццкий_рыцарь:)   (2006-01-03 01:25:00) [160]

Вот тут начитавшись ваших хороших откликов в сторону ГЛСцен, решил забросить ДелфиХ и Начать долбить ГЛСцен :) Кстати на сайте www.glscene.ru рассказывается про 3Д графику, а там есть про 2Д? потому что я толком еще 2Д и незнаю, а с 3Д я сразу "загнусь"


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

Наверх

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