forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Универсальный выбор дейцствия. (http://forum.boolean.name/showthread.php?t=12220)

battou 18.03.2010 20:05

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

У меня есть ряд функций действия, например атака, тяжёлая атака, лечение и тп. Вот, у меня есть функция основного меню боя которая возвращает наименование действия и у меня есть функция выбора враза (если действие применяется не к игроку) которое возвращает номер врага для применения действия. Вотс... вот ка мне сделать что бы к выбранному врагу применялась нужная функция без кучи IF THEN или длинного SELECT? Можно это как-то обойти?

Amatsu 18.03.2010 20:14

Ответ: Универсальный выбор дейцствия.
 
Эм... в смысле выбор между разными вариантами действия? Конечно через SELECT

Hurrit 18.03.2010 20:17

Ответ: Универсальный выбор дейцствия.
 
Нea, нeльзя. По-любому нужны условия

battou 18.03.2010 20:22

Re: Универсальный выбор дейцствия.
 
Ясненько. Спасибо.)) Надеюсь селект из 15 пунктов не сильно затормозит программу.

Amatsu 18.03.2010 20:29

Ответ: Универсальный выбор дейцствия.
 
Цитата:

Сообщение от Hurrit (Сообщение 142284)
Нea, нeльзя. По-любому нужны условия

Ну если у него аля финалка, то у всех персонажей одинаковый набор анимаций (падение на землю, сон, боевая стойка, атака и т.д.), через селект выбираем действие, которое куском кода описывает какой спецэффект будет использован, как он подействует на врага и какую анимацию включать врагу при попадании по нему. Врагов можно занести просто в один тип и в коде каждый цикл перебирать всех представителей этого типа. Различаться противники будут моделькой, характеристиками типа хп, а так же указанием на модель поведения (какими скилами бьет и при каких условиях)

battou 18.03.2010 20:39

Re: Универсальный выбор дейцствия.
 
Ага.) Как ты сказал так у меня всё и сделано, для врагов тип с одинаковым набором параметров.) А игрок у меня вообще один, я решил не делать толпу героев, они будут сюжетными,но в бою будет принимать участие только глав-герой.)

EvilChaotic 18.03.2010 21:14

Ответ: Универсальный выбор дейцствия.
 
Код:

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 Хотя это гомнотест )

ABTOMAT 18.03.2010 21:16

Ответ: Универсальный выбор дейцствия.
 
Select разворачивается потом автоматом в if, использовать нужно то, что в данный момент удобнее.

EvilChaotic 18.03.2010 21:24

Ответ: Универсальный выбор дейцствия.
 
Цитата:

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

Честно говоря о такой мелочи не знал ) Спасибо.

jimon 18.03.2010 21:36

Ответ: Универсальный выбор дейцствия.
 

в нормальных языках в selectах используется переход по смещению, потому нет там никаких if'ов

Nex 19.03.2010 09:32

Ответ: Универсальный выбор дейцствия.
 
Мне кажется, что нужна универсальная функция где например IDЮнита/Врага, действие и т.д. и делать, как сказали через Select. :)

battou 19.03.2010 12:21

Re: Универсальный выбор дейцствия.
 
Как всегда мыслим паралельно.))) Уже сделано две функции одна атака врага игроком где выбирается какого врага атаковать, какую анимацию атаки исспользовать (разные там скилы), модификатор урона и модификатор защиты врага. И отдельная универсальная функция для врагов для атаки игрока.)))

Damp 19.03.2010 20:36

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


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

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