forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на Blitz3D (http://forum.boolean.name/forumdisplay.php?f=14)
-   -   Bomberman_Standard_Edition (http://forum.boolean.name/showthread.php?t=79)

Жека 03.10.2005 19:57

Вложений: 1
Код взят из ф-ии fnLoadLevel()

Раньше было так:

Код:

...............................
cube.cubes = New cubes
cube\obj = CopyEntity(scub)
EntityAlpha cube\obj,0.5
;ставим куда надо
PositionEntity cube\obj,x*width1+5,5,-z*depth1-5
EntityType scub,typecube
...............................
cube.cubes = New cubes
cube\obj = CopyEntity(scub2)
;ставим куда надо
PositionEntity cube\obj,x*width2+5,5,-z*depth2-5
EntityType scub2,typecube2
...............................

А должно быть так:

Код:

...............................
cube.cubes = New cubes
cube\obj = CopyEntity(scub)
EntityAlpha cube\obj,0.5
;ставим куда надо
PositionEntity cube\obj,x*width1+5,5,-z*depth1-5
EntityType cube\obj,typecube
...............................
cube.cubes = New cubes
cube\obj = CopyEntity(scub2)
;ставим куда надо
PositionEntity cube\obj,x*width2+5,5,-z*depth2-5
EntityType cube\obj,typecube2
...............................

Обратите внимание (сравните) на строчки, начинающиеся с EntityType в старом коде и в новом...


Сделал противников 2го типа, но они дерганые какие-то получились. :(

Устранить дерганье можно так: сделать два "пикера" - это два пивота, которые располижить соотв. у правого и левого краёв объекта-противника в качестве его детей, и делать EntityPick не для самого объекта, а для этих пикеров. Если противник "захотел" повернуться в сторону, то поворачивать его только в том случае, когда оба пикера вернули НОЛЬ.

Я пробовал сделать одного пикера - не получил того, что хотел (надеюсь что потому, что делал неправильно). Поэтому выкладываю код с дерганными "чертями".

ПС:
1 - сделать противника 1го типа
2 - сделать противника 2го типа

Выкладываю ВСЕ ресурсы игры.

ППС: делаю исходник ЕЩЕ и в формате *.txt, потому что в редакторе кода он в непонятной кодировке (Юникод может?), и русские буквы у вас могут стать корявками (при копировании сюда, в форум, так и происходит).

pax 04.10.2005 00:07

FPS меня не радует в двух отношениях:
1. Чатота изменения FPS (очень быстро дергается)
Предлогаю заменить на следующее:
Код:

* * *;FPS CHECK;
 *MS#=MilliSecs()
 *If (MS-MSL)>=500 Then
 *        FPS=FPS_Count*2
 *        FPS_Count=0
 *        MSL=MS
 *Else
 *        FPS_Count=FPS_Count+1
 *EndIf
 * * *;FPS CHECK;

изменяться будет раз в пол секунды
2. Сам FPS маловат (у меня CeleronD 2400 а FPS всего примерно 138 кадров/с)
Предлагаю уменьшить кол-во объектов на карте путем загрузки всех неразрушаемых объектов как один (создавать повертексно в одном и том же меше(mesh), а точнее в его поверхности (surfse)), далее изменить к нему метод столкновения на ellipsoid-to-polygon.
Это повысит FPS
Вот к примеру функции из моей игры(http://pax-games.narod.ru/downloads/bombers3d.exe):
Код:

Const BoxUpperSide%=0 *
Const BoxFrontSide%=1
Const BoxBackSide%=2
Const BoxLeftSide%=3
Const BoxRighrtSide%=4

;C-размер куба, Surf%-поверхность к которой добавляется Куб
;X#,Y#,Z# - координаты центра куба
Function AddBoxToSurface(Surf%,BoxSide%,X#,Y#,Z#,C#=1)
        AddBoxSideToSurface(Surf%,BoxUpperSide%,X#,Y#,Z#,C#)
        AddBoxSideToSurface(Surf%,BoxFrontSide%,X#,Y#,Z#,C#)
        AddBoxSideToSurface(Surf%,BoxBackSide%,X#,Y#,Z#,C#)
        AddBoxSideToSurface(Surf%,BoxLeftSide%,X#,Y#,Z#,C#)
        AddBoxSideToSurface(Surf%,BoxRighrtSide%,X#,Y#,Z#,C#)
; Нижнюю сторону куба я не добавлял :)
End Function

;Можно добавить только сторону
Function AddBoxSideToSurface(Surf%,BoxSide%,X#,Y#,Z#,C#)
Local X1#, Y1#, Z1#, X2#, Y2#, Z2#, X3#, Y3#, Z3#, X4#, Y4#, Z4#
Local V1%, V2%, V3%, V4%
Local T1%, T2%
        C#=C#/2
        Select BoxSide%
 *Case BoxUpperSide%
 *        X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 *        Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#+C
 *        Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
 *Case BoxFrontSide%
 *        X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 *        Y1#=Y#-C: Y2#=Y#-C: Y3#=Y#+C: Y4#=Y#+C
 *        Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#-C: Z4#=Z#-C
 *Case BoxBackSide%
 *        X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 *        Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#-C: Y4#=Y#-C
 *        Z1#=Z#+C: Z2#=Z#+C: Z3#=Z#+C: Z4#=Z#+C
 *Case BoxLeftSide%
 *        X1#=X#-C: X2#=X#-C: X3#=X#-C: X4#=X#-C
 *        Y1#=Y#-C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#-C
 *        Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
 *Case BoxRighrtSide%
 *        X1#=X#+C: X2#=X#+C: X3#=X#+C: X4#=X#+C
 *        Y1#=Y#+C: Y2#=Y#-C: Y3#=Y#-C: Y4#=Y#+C
 *        Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
        End Select
        V1%=AddVertex(Surf%, X1#, Y1#, Z1#, 0, 0)
        V2%=AddVertex(Surf%, X2#, Y2#, Z2#, 1, 0)
        V3%=AddVertex(Surf%, X3#, Y3#, Z3#, 1, 1)
        V4%=AddVertex(Surf%, X4#, Y4#, Z4#, 0, 1)
        T1%=AddTriangle(Surf%, V1%,V3%,V2%)
        T2%=AddTriangle(Surf%, V1%,V4%,V3%)
End Function


pax 04.10.2005 01:04

Извиняюсь за ошибку
Код:

C#=C#/2
написано русскими буквами


alc'o'SHoLiK: исправил.

pax 04.10.2005 09:20

Наверное я погорячился с методом ellipsoid-to-polygon.
Лучше вместо этого создать точку привязки и поставить ее на мето куба:
Код:

Type GeomPivot
        field Pivot%
End Type

GPiv.GeomPivot=new GeomPivot
GPiv\Pivot=createpivot()
EntityRadius(GPiv\Pivot,5)
PositionEntity GPiv\Pivot,x*width2+5,5,-z*depth2-5
EntityType cube\obj,typecube2

А в процедуре fnDestroyField() использовать следующую функцию

Код:

Function FNDestroyPivots()
        For GPiv.GeomPivot=each GeomPivot
 Freeentity(GPiv\Pivot)
 delete GPiv
        Next
End Function


alcosholik 04.10.2005 22:20

Насчет ФПС.
http://community.boolean.name/index.php?ac...=8&st=0#entry71

Обновляется раз в секунду.

Fant 04.10.2005 23:07

2PAX

Спасибо, конечно, за примеры, но лично для меня (проектировщик и "наставитель" проекта) ои показались сложными...
Я уверен, что кодеры, которые учавствуют в проекте по достоинству оценят ваш код!

Заменил FPS проверку. Ваш вариант удобнее.

Присоединяйся к нашему проекту! Я уверен, что с большей командой мы сделаем быстрее и лучше проект!!!

2Жека

Дааа))
нашел 10 отличий в коде!!! Теперь с "кубиками" покончено.

2All

Остается:

1) Домучить противника 2го типа
2) Сделать противника 3его типа

а я, найдя время доведу-таки призы до ума!

pax 05.10.2005 23:49

Да все не так уж и сложно:

В этом блоке определяются координаты вертексов(вершин) сторон куба(кроме нижней стороны)
Код:

Select BoxSide%
 Case BoxUpperSide%
 X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#+C
 Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
 Case BoxFrontSide%
 X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 Y1#=Y#-C: Y2#=Y#-C: Y3#=Y#+C: Y4#=Y#+C
 Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#-C: Z4#=Z#-C
 Case BoxBackSide%
 X1#=X#-C: X2#=X#+C: X3#=X#+C: X4#=X#-C
 Y1#=Y#+C: Y2#=Y#+C: Y3#=Y#-C: Y4#=Y#-C
 Z1#=Z#+C: Z2#=Z#+C: Z3#=Z#+C: Z4#=Z#+C
 Case BoxLeftSide%
 X1#=X#-C: X2#=X#-C: X3#=X#-C: X4#=X#-C
 Y1#=Y#-C: Y2#=Y#+C: Y3#=Y#+C: Y4#=Y#-C
 Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
 Case BoxRighrtSide%
 X1#=X#+C: X2#=X#+C: X3#=X#+C: X4#=X#+C
 Y1#=Y#+C: Y2#=Y#-C: Y3#=Y#-C: Y4#=Y#+C
 Z1#=Z#-C: Z2#=Z#-C: Z3#=Z#+C: Z4#=Z#+C
End Select

Далее создание 4-х вершин и двух полигонов по ним, используя координаты рассчитанные выше. Последние два параметра в функции AddVertex означают UV координаты текстуры.
Код:

V1%=AddVertex(Surf%, X1#, Y1#, Z1#, 0, 0)
V2%=AddVertex(Surf%, X2#, Y2#, Z2#, 1, 0)
V3%=AddVertex(Surf%, X3#, Y3#, Z3#, 1, 1)
V4%=AddVertex(Surf%, X4#, Y4#, Z4#, 0, 1)
T1%=AddTriangle(Surf%, V1%,V3%,V2%)
T2%=AddTriangle(Surf%, V1%,V4%,V3%)


pax 05.10.2005 23:58

Для использования этих функций нужно создать мустую модель и поверхность в ней жля добавления геометрии, вот пример:

Код:

global Mesh%=createmesh()
Global Surface%=Createsurface(Mesh)

;Добавление одного куба с координатами x,y,z с размером С
AddBoxToSurface(Surface%,X,Y,Z,C)

Кстати я ошибся в указании параметров функции (один лишний):

Код:

Function AddBoxToSurface(Surf%,X#,Y#,Z#,C#=1)
  AddBoxSideToSurface(Surf%,BoxUpperSide%,X#,Y#,Z#,C#)
  AddBoxSideToSurface(Surf%,BoxFrontSide%,X#,Y#,Z#,C#)
  AddBoxSideToSurface(Surf%,BoxBackSide%,X#,Y#,Z#,C#)
  AddBoxSideToSurface(Surf%,BoxLeftSide%,X#,Y#,Z#,C#)
  AddBoxSideToSurface(Surf%,BoxRighrtSide%,X#,Y#,Z#,C#)
; Нижнюю сторону куба я не добавлял :)
End Function

А точки привязк необходимо добавлять для обработки столкновений. Вот и все :)

alcosholik 14.10.2005 20:37

Куда делся Fant? Проект же в самом разгаре разработки был.

Fant 14.10.2005 22:27

У Fant'а очень много всякой х... ((

и он очень хочет продолжить проект, но я боюсь, что ВРЕМЕННО он не сможет ничего ДЕЛАТЬ.

Список вопросов:
ИИ типа 2,3,4,5

Доделать призы, основываясь на диздоке

А еще я ВОЗМОЖНО найду художницу (она знает фотошоп ) это хоршая новость. Плохая - у меня много учебы

Проект не умер...

Просто сейчас проекту как никогда нужен чел. у которого есть время и ОПЫТ осветить данные вопросы!!!

Fant 22.10.2005 10:56

Люди!
почему вы молчити!Или совсем про бомбера забыли! Ведь проетк готов почти на 45%!

Без ВАШЕЙ помощи мне ИИ никогда не одолеть!

Призы я почти сделал! скоро выложу (просто у меня мкоро д/р и в универе грузят! Но жизни для игрока я УЖЕ сделал. Осталось только приз-детонатор сделать.

А как помощь мне необходимы:
ИИ 2 типа доделать

Странник - этот тип имеет обыновение путешествовать по игровой локации, поворачивая в случайном направлении(на 90,180,270,360 грудусов) каждые N количество секунд. Если встречает препятствие(любое), поворачивает на 90 грудусов


Сделать:
1) ИИ 3 типа
Ловец - не путешествует по локации(стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути возможный вариант)

2) ИИ 4 типа
Убийца - путешествует по локации(не стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути).

3) ИИ 5 типа
Активный - путешествует по карте. Избегает игрока. Создает юнитов с ИИ типа "Пассивный"

Fant 22.10.2005 18:50

Доделал призы.

Теперь:

F3 - детонатор. Бомбы взрываются после нажатия клавиши enter
F4 - увеличение жизни игрока
F5 - увеличение количества бомб (зеленый)
F6 - увеличение радиуса разлета осколков (красный)
F7 - увеличение скорости движения игрока (синий)

Это радует. Фактически система призов сделана. Необходимо доделать ИИ

Нужно:

1) ИИ 3 типа
Ловец - не путешествует по локации(стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути возможный вариант)

2) ИИ 4 типа
Убийца - путешествует по локации(не стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути).

3) ИИ 5 типа
Активный - путешествует по карте. Избегает игрока. Создает юнитов с ИИ типа "Пассивный"

Это по ИИ пока все.

Поработать над камерой

Камера:

1. Вид "из глаз"(как в экшн).

2. Следящая сверху справа(или слева).камера следит за игроком(как в РПГ).

3. Вид "вертикально сверху. При приближении камера следит за игроком.

4. Вид, установленный пользователем. камера следит за игроком(любой вариант, настроенный игроком).

----------------------------
Люди! Почему все молчим?
Я ведь без вашей помощи не сделаю полностью качественный проект!
Пожалуйста, помогите мне с вопросами камеры, и,конечно, самое главное с ИИ.
Я понимаю, что дать совет проще, но я отлично понимаю, что никому не хочется копаться в коде, но проект ведь "форумный", а к сожалению кроме меня и жеки никто в нем не учавствует! Вот так прикол!
Я бы очень хотел, что бы еще хоть кто-нибудь присоединился к нашей команде, и помог нам!
-------------------------

Присоединяю ВЕСЬ пакет бомбера!
ВНИМАНИЕ: весит 17КБ

Fant 22.10.2005 23:12

Очень постыдно выпускаю другой файл .bb

Я перепутал тогда файлы и отправил старый !!!

Просто замените старый файл на этот

ЕСЛИ ЗАМЕЧЕНЫ БАГИ, просьба их исправить (по возможности)
либо просто предоставить список токовых!

Жека 24.10.2005 12:23

1. По-моему, Астар - это слишком, тут проще можно сделать, в теории. На практике попробую, тогда точно скажу потянет или нет тот метод...
2. С камерой ты перегнул. Столько видов ни к чему, хотя в плане разнообразия это плюс. Если делать камеру от первой морды, то надо радар делать, чтобы видеть бомбы и игроков - это не проблема, проблема в том, что так неудобно играть будет (хотя кому как).
Еще: если дать возможность камере НИЗКО опускаться, то модели объектов должны выглядеть лучше в разы...

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

ПС: скоро мозги подделаю противникам (и самих недостающих типов противников), так что вряд ли кто-то останется в живых после встречи с ними ;)

Fant 24.10.2005 17:28

2Жека
1. По-моему тоже слишком, но просто это единственный пример, который пришел мне в голову. Пробуй свой метод. Я надеюсь, что все получится!

2. Конечно в плане разнообразия! Камера - с ней всегда можно побаловаться, а пользователь сам придумает, как уму лучше.

3. Я не уверен в "нужности" радара. Его ненадо делать, ведь если пользователь захочет, он сделает "вид сверху". Предложение про радар отменяется еще и по другой причине. Я ставил 15 врагов и очень расстроился количеством ФПС:
1). В самом начале 130-150.
2). 45 врагов - 40 фпс. не стабильно. глючт. это нормально? или "проблема в быстродействие?

4.Сколько "без тормозов" максимум можно кидать "врагов" на уровень?

5.Конечно модели должны быть отличными, ибо это простая аркадка и поэтому кроме как геймплеем и графикой, увы, ничем больше "славиться" не может.

6.А кроме меня, и тебя, Жека, сюда уже дааавно никто не "вносил поправки" в код. Поэтому все в коде, что я выложил сделано (то, что новое появилось) мною.

7.Спасибо, что "мозги" врагов делаешь!

2All:


Камера:

1. Вид "из глаз"(как в экшн).

2. Следящая сверху справа(или слева).камера следит за игроком(как в РПГ).

3. Вид "вертикально сверху. При приближении камера следит за игроком.

4. Вид, установленный пользователем. камера следит за игроком(любой вариант, настроенный игроком).

Протестить ФПС:

НЕ мало ли ФПС? Если кто-то считает, что производительность не очень, я с удовольствием приму поправки в код.

Сделать функцию, расставляющую "пробиваемые" кубики на поле. То есть как "случайная расстановка" (для мультиплеера)

------------------------------------------------------------------------------------------------


Часовой пояс GMT +4, время: 12:32.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot