Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 18.03.2010, 20:05   #1
battou
Нуждающийся
 
Регистрация: 19.01.2007
Сообщений: 75
Написано 3 полезных сообщений
(для 3 пользователей)
Универсальный выбор дейцствия.

Снова здассте.)) Я уже на грани завершения боевой системы, всё адаптированно под типы и ини для универсальности, но столкнулся со следующей проблемой:

У меня есть ряд функций действия, например атака, тяжёлая атака, лечение и тп. Вот, у меня есть функция основного меню боя которая возвращает наименование действия и у меня есть функция выбора враза (если действие применяется не к игроку) которое возвращает номер врага для применения действия. Вотс... вот ка мне сделать что бы к выбранному врагу применялась нужная функция без кучи IF THEN или длинного SELECT? Можно это как-то обойти?
(Offline)
 
Ответить с цитированием
Старый 18.03.2010, 20:14   #2
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Универсальный выбор дейцствия.

Эм... в смысле выбор между разными вариантами действия? Конечно через SELECT
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Amatsu за это полезное сообщение:
battou (18.03.2010), Nex (19.03.2010)
Старый 18.03.2010, 20:17   #3
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Универсальный выбор дейцствия.

Нea, нeльзя. По-любому нужны условия
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
battou (18.03.2010)
Старый 18.03.2010, 20:22   #4
battou
Нуждающийся
 
Регистрация: 19.01.2007
Сообщений: 75
Написано 3 полезных сообщений
(для 3 пользователей)
Re: Универсальный выбор дейцствия.

Ясненько. Спасибо.)) Надеюсь селект из 15 пунктов не сильно затормозит программу.
(Offline)
 
Ответить с цитированием
Старый 18.03.2010, 20:29   #5
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Универсальный выбор дейцствия.

Сообщение от Hurrit Посмотреть сообщение
Нea, нeльзя. По-любому нужны условия
Ну если у него аля финалка, то у всех персонажей одинаковый набор анимаций (падение на землю, сон, боевая стойка, атака и т.д.), через селект выбираем действие, которое куском кода описывает какой спецэффект будет использован, как он подействует на врага и какую анимацию включать врагу при попадании по нему. Врагов можно занести просто в один тип и в коде каждый цикл перебирать всех представителей этого типа. Различаться противники будут моделькой, характеристиками типа хп, а так же указанием на модель поведения (какими скилами бьет и при каких условиях)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (19.03.2010)
Старый 18.03.2010, 20:39   #6
battou
Нуждающийся
 
Регистрация: 19.01.2007
Сообщений: 75
Написано 3 полезных сообщений
(для 3 пользователей)
Re: Универсальный выбор дейцствия.

Ага.) Как ты сказал так у меня всё и сделано, для врагов тип с одинаковым набором параметров.) А игрок у меня вообще один, я решил не делать толпу героев, они будут сюжетными,но в бою будет принимать участие только глав-герой.)
(Offline)
 
Ответить с цитированием
Старый 18.03.2010, 21:14   #7
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Универсальный выбор дейцствия.

Select Event
      Case 
      Case
      Case
      Case
      Default
End Select
Собственно, для того он и сделан. Select работает быстрее чем If если параметров много, а If наоборот. Вот сделал небольшой тест:

Const  Step_% = 1000000

Local Event%
Local Time%

Const EV_EVENT1% = 1 : Const EV_EVENT2% = 2
Const EV_EVENT3% = 3 : Const EV_EVENT4% = 4
Const EV_EVENT5% = 5 : Const EV_EVENT6% = 6
Const EV_EVENT7% = 7

Time = MilliSecs()
For i = 1 To Step_
	Select Event
		Case EV_EVENT1%
		Case EV_EVENT2%
		Case EV_EVENT3%
		Case EV_EVENT4%
		Case EV_EVENT5%
		Case EV_EVENT6%
		Case EV_EVENT7%
	End Select
Next
Print   "Select: " + (MilliSecs() - Time) + " " + "ms" 

Time = MilliSecs()
For i = 1 To Step_
	If Event = EV_EVENT1%
	ElseIf Event =  EV_EVENT2%
	ElseIf Event =  EV_EVENT3%
	ElseIf Event =  EV_EVENT4%
	ElseIf Event =  EV_EVENT5%
	ElseIf Event =  EV_EVENT6%
	ElseIf Event =  EV_EVENT7%
	End If
Next
Print "If: " + (MilliSecs() - Time) + " " + "ms" 

WaitKey()
У меня выдало при 1000000 операций: If - 7 ms : Select - 5 ms Хотя это гомнотест )
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Старый 18.03.2010, 21:16   #8
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Универсальный выбор дейцствия.

Select разворачивается потом автоматом в if, использовать нужно то, что в данный момент удобнее.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
Amatsu (18.03.2010), Dream (19.03.2010), EvilChaotic (18.03.2010), Nex (19.03.2010), Reizel (20.03.2010)
Старый 18.03.2010, 21:24   #9
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Универсальный выбор дейцствия.

Сообщение от ABTOMAT Посмотреть сообщение
Select разворачивается потом автоматом в if, использовать нужно то, что в данный момент удобнее.
Честно говоря о такой мелочи не знал ) Спасибо.
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (18.03.2010)
Старый 18.03.2010, 21:36   #10
jimon
 
Сообщений: n/a
Ответ: Универсальный выбор дейцствия.


в нормальных языках в selectах используется переход по смещению, потому нет там никаких if'ов
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (19.03.2010)
Старый 19.03.2010, 09:32   #11
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Универсальный выбор дейцствия.

Мне кажется, что нужна универсальная функция где например IDЮнита/Врага, действие и т.д. и делать, как сказали через Select.
(Offline)
 
Ответить с цитированием
Старый 19.03.2010, 12:21   #12
battou
Нуждающийся
 
Регистрация: 19.01.2007
Сообщений: 75
Написано 3 полезных сообщений
(для 3 пользователей)
Re: Универсальный выбор дейцствия.

Как всегда мыслим паралельно.))) Уже сделано две функции одна атака врага игроком где выбирается какого врага атаковать, какую анимацию атаки исспользовать (разные там скилы), модификатор урона и модификатор защиты врага. И отдельная универсальная функция для врагов для атаки игрока.)))
(Offline)
 
Ответить с цитированием
Старый 19.03.2010, 20:36   #13
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Универсальный выбор дейцствия.

На тест if/select который выше может сильно влиять то включен ли debug.
Согласен с ABTOMAT в том плане, что лучше использовать более удобный вариант, чем более быстрый. +/- 100..200 if или case погоды не сделают.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com