|
Проекты на Blitz3D Обсуждение будущих проектов, демок, набор команды и т.п. |
03.10.2005, 19:57
|
#46
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Код взят из ф-ии 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, потому что в редакторе кода он в непонятной кодировке (Юникод может?), и русские буквы у вас могут стать корявками (при копировании сюда, в форум, так и происходит).
|
(Offline)
|
|
04.10.2005, 00:07
|
#47
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
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
|
(Offline)
|
|
04.10.2005, 01:04
|
#48
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Извиняюсь за ошибку
написано русскими буквами
alc'o'SHoLiK: исправил.
|
(Offline)
|
|
04.10.2005, 09:20
|
#49
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Наверное я погорячился с методом 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
|
(Offline)
|
|
04.10.2005, 23:07
|
#51
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
2PAX
Спасибо, конечно, за примеры, но лично для меня (проектировщик и "наставитель" проекта) ои показались сложными...
Я уверен, что кодеры, которые учавствуют в проекте по достоинству оценят ваш код!
Заменил FPS проверку. Ваш вариант удобнее.
Присоединяйся к нашему проекту! Я уверен, что с большей командой мы сделаем быстрее и лучше проект
2Жека
Дааа))
нашел 10 отличий в коде Теперь с "кубиками" покончено.
2All
Остается:
1) Домучить противника 2го типа
2) Сделать противника 3его типа
а я, найдя время доведу-таки призы до ума!
|
(Offline)
|
|
05.10.2005, 23:49
|
#52
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Да все не так уж и сложно:
В этом блоке определяются координаты вертексов(вершин) сторон куба(кроме нижней стороны)
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%)
|
(Offline)
|
|
05.10.2005, 23:58
|
#53
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Для использования этих функций нужно создать мустую модель и поверхность в ней жля добавления геометрии, вот пример:
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
А точки привязк необходимо добавлять для обработки столкновений. Вот и все
|
(Offline)
|
|
14.10.2005, 20:37
|
#54
|
|
Куда делся Fant? Проект же в самом разгаре разработки был.
|
|
|
14.10.2005, 22:27
|
#55
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
У Fant'а очень много всякой х... ((
и он очень хочет продолжить проект, но я боюсь, что ВРЕМЕННО он не сможет ничего ДЕЛАТЬ.
Список вопросов:
ИИ типа 2,3,4,5
Доделать призы, основываясь на диздоке
А еще я ВОЗМОЖНО найду художницу (она знает фотошоп ) это хоршая новость. Плохая - у меня много учебы
Проект не умер...
Просто сейчас проекту как никогда нужен чел. у которого есть время и ОПЫТ осветить данные вопросы
|
(Offline)
|
|
22.10.2005, 10:56
|
#56
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Люди!
почему вы молчити!Или совсем про бомбера забыли! Ведь проетк готов почти на 45%!
Без ВАШЕЙ помощи мне ИИ никогда не одолеть!
Призы я почти сделал! скоро выложу (просто у меня мкоро д/р и в универе грузят! Но жизни для игрока я УЖЕ сделал. Осталось только приз-детонатор сделать.
А как помощь мне необходимы:
ИИ 2 типа доделать
Странник - этот тип имеет обыновение путешествовать по игровой локации, поворачивая в случайном направлении(на 90,180,270,360 грудусов) каждые N количество секунд. Если встречает препятствие(любое), поворачивает на 90 грудусов
Сделать:
1) ИИ 3 типа
Ловец - не путешествует по локации(стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути возможный вариант)
2) ИИ 4 типа
Убийца - путешествует по локации(не стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути).
3) ИИ 5 типа
Активный - путешествует по карте. Избегает игрока. Создает юнитов с ИИ типа "Пассивный"
|
(Offline)
|
|
22.10.2005, 18:50
|
#57
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Доделал призы.
Теперь:
F3 - детонатор. Бомбы взрываются после нажатия клавиши enter
F4 - увеличение жизни игрока
F5 - увеличение количества бомб (зеленый)
F6 - увеличение радиуса разлета осколков (красный)
F7 - увеличение скорости движения игрока (синий)
Это радует. Фактически система призов сделана. Необходимо доделать ИИ
Нужно:
1) ИИ 3 типа
Ловец - не путешествует по локации(стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути возможный вариант)
2) ИИ 4 типа
Убийца - путешествует по локации(не стоит на месте). Если есть возможность видеть игрока, следует за ним( Астар(Astar) поиск пути).
3) ИИ 5 типа
Активный - путешествует по карте. Избегает игрока. Создает юнитов с ИИ типа "Пассивный"
Это по ИИ пока все.
Поработать над камерой
Камера:
1. Вид "из глаз"(как в экшн).
2. Следящая сверху справа(или слева).камера следит за игроком(как в РПГ).
3. Вид "вертикально сверху. При приближении камера следит за игроком.
4. Вид, установленный пользователем. камера следит за игроком(любой вариант, настроенный игроком).
----------------------------
Люди! Почему все молчим?
Я ведь без вашей помощи не сделаю полностью качественный проект!
Пожалуйста, помогите мне с вопросами камеры, и,конечно, самое главное с ИИ.
Я понимаю, что дать совет проще, но я отлично понимаю, что никому не хочется копаться в коде, но проект ведь "форумный", а к сожалению кроме меня и жеки никто в нем не учавствует! Вот так прикол!
Я бы очень хотел, что бы еще хоть кто-нибудь присоединился к нашей команде, и помог нам!
-------------------------
Присоединяю ВЕСЬ пакет бомбера!
ВНИМАНИЕ: весит 17КБ
|
(Offline)
|
|
22.10.2005, 23:12
|
#58
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
Очень постыдно выпускаю другой файл .bb
Я перепутал тогда файлы и отправил старый
Просто замените старый файл на этот
ЕСЛИ ЗАМЕЧЕНЫ БАГИ, просьба их исправить (по возможности)
либо просто предоставить список токовых!
|
(Offline)
|
|
24.10.2005, 12:23
|
#59
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
1. По-моему, Астар - это слишком, тут проще можно сделать, в теории. На практике попробую, тогда точно скажу потянет или нет тот метод...
2. С камерой ты перегнул. Столько видов ни к чему, хотя в плане разнообразия это плюс. Если делать камеру от первой морды, то надо радар делать, чтобы видеть бомбы и игроков - это не проблема, проблема в том, что так неудобно играть будет (хотя кому как).
Еще: если дать возможность камере НИЗКО опускаться, то модели объектов должны выглядеть лучше в разы...
А молчим потому, что у большинства учеба и свои проекты не терпят отлагательства.
Если конкретное что-то спрашивать, то совет всегда дадут, а так сложновато...
Кстати, стиль прогерства у всех свой, поэтому после изменения кода разбираться сложнее...
ПС: скоро мозги подделаю противникам (и самих недостающих типов противников), так что вряд ли кто-то останется в живых после встречи с ними
|
(Offline)
|
|
24.10.2005, 17:28
|
#60
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений (для 5 пользователей)
|
2Жека
1. По-моему тоже слишком, но просто это единственный пример, который пришел мне в голову. Пробуй свой метод. Я надеюсь, что все получится!
2. Конечно в плане разнообразия! Камера - с ней всегда можно побаловаться, а пользователь сам придумает, как уму лучше.
3. Я не уверен в "нужности" радара. Его ненадо делать, ведь если пользователь захочет, он сделает "вид сверху". Предложение про радар отменяется еще и по другой причине. Я ставил 15 врагов и очень расстроился количеством ФПС:
1). В самом начале 130-150.
2). 45 врагов - 40 фпс. не стабильно. глючт. это нормально? или "проблема в быстродействие?
4.Сколько "без тормозов" максимум можно кидать "врагов" на уровень?
5.Конечно модели должны быть отличными, ибо это простая аркадка и поэтому кроме как геймплеем и графикой, увы, ничем больше "славиться" не может.
6.А кроме меня, и тебя, Жека, сюда уже дааавно никто не "вносил поправки" в код. Поэтому все в коде, что я выложил сделано (то, что новое появилось) мною.
7.Спасибо, что "мозги" врагов делаешь!
2All:
Камера:
1. Вид "из глаз"(как в экшн).
2. Следящая сверху справа(или слева).камера следит за игроком(как в РПГ).
3. Вид "вертикально сверху. При приближении камера следит за игроком.
4. Вид, установленный пользователем. камера следит за игроком(любой вариант, настроенный игроком).
Протестить ФПС:
НЕ мало ли ФПС? Если кто-то считает, что производительность не очень, я с удовольствием приму поправки в код.
Сделать функцию, расставляющую "пробиваемые" кубики на поле. То есть как "случайная расстановка" (для мультиплеера)
------------------------------------------------------------------------------------------------
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:41.
|