forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Shift+up (http://forum.boolean.name/showthread.php?t=3997)

Alex_Noc 24.07.2007 15:27

Shift+up
 
как сделать нажатие двух клавишь одновременно , например для "красться" или для переключиться в бег (когда нажата кнопка "up" и вдруг надо срочно ускориться , жму на "шифт" но эффекта нет. Пробовал так : if keydown () and keydown() then действие
и еще пробовал так: красться=keydown ()+keydown ()
if красться=2 then действие вобщем почемуто не получилось , очень нужно . Заранее спасибо!

moka 24.07.2007 15:54

Re: Shift+up
 
Кнопки привязывай к переменным.
В начале цикла:
IKdSft=KeyDown(...)
IKdUp=KeyDown(...)
If IKdSft+IKdUp=2
Endif

IGR 26.07.2007 15:25

Re: Shift+up
 
if keydown("UP")
if keydown("SHIFT")
.......
endif
endif

moka 26.07.2007 15:37

Re: Shift+up
 
IGR
А если кнопка используеться много раз в цикле? Привязка наилучший способ. Всё в чистоте и порядке тогда будет.
А при твоей раскладке, будут неправильные обновления, это как если сделать сперва проверку на координаты, а только потом нажата ли мышка, тогда будет баг, что если нажать вне координат кнопки, затем навести, она нажмёться. Вот такие пироги ;)

IGR 26.07.2007 19:05

Re: Shift+up
 
ну да Ты прав !!
но я так делал и нечё !!

moka 26.07.2007 19:36

Re: Shift+up
 
IGR
Может быть и ничего. но всякое бывает, потом будет чего :)
Лучше изначально стиль кодинга развивать, чтобы потом себя на ошибках не ловить.

Leito 03.08.2007 01:37

Re: Shift+up
 
MoKa, попробую доказать что твой стиль тормознее чем силь ИГРа
ты вначале цилка проверяешь все кнопки.

в коде не могут 2 раза в цикле проверяться нажатие одной кнопки(если у кодера конечно руки прямые). ведь для каждой кнопки 1 действие. могут быть конечно разные части игры и в них кнопка выполняет раные действия. но части игры то разные и повтора проверки нажатия кнопки не будет.

и получается если допустим в игре используется 10 разных кнопок, то в твоем случае 10 проверок каждый цикл. а в случае ИГРа может быть и меньше проверок. например 8 в игре. а еще 2 в меню.
вот такая вот арифметика))

jimon 03.08.2007 10:07

Re: Shift+up
 
Leito
то что дал MoKa более работоспособное чем то что предложил IGR
потому что ето намного удобнее для последуйшей реализации изменения управления

притом надо систематизировать где ты читаеш клавиши, и не разбрасывать по коду

и функции keydown \ keyhit ето простое обращение к внутренему масиву

johnk 03.08.2007 11:38

Re: Shift+up
 
Такая систематизация только лишние ресурсы хавает. А эффект тот же. Тут от прогера зависит в общем. Как удобней - так и будет.

IGR 03.08.2007 11:47

Re: Shift+up
 
Цитата:

Тут от прогера зависит в общем. Как удобней - так и будет.
а ещо зависит от предназначения кода !! в каждой ситуации есть свой оптимальный вариант !!

jimon 03.08.2007 15:06

Re: Shift+up
 
JohnK
ничего она не хавает
два if хавают больше чем два keyhit :)
притом народ не туда смотрите ... тут нету никаких принципиальных оптимизаций
вот критические оптимизации когда векторые расчеты идут ... вот там надо смотреть что быстрее

Leito 03.08.2007 15:22

Re: Shift+up
 
jimon
зато лишнии затрааты оперативной памяти
4*кол-во кнопок - байт.
на глобальные переменные

jimon 03.08.2007 16:01

Re: Shift+up
 
Leito
ну если руки из правильного места растут то 1*кол_кнопок байт :)
так короче не холиварим, такие оптимизации до лампочки в конечном продукте

impersonalis 03.08.2007 16:18

Re: Shift+up
 
Цитата:

jimon
зато лишнии затрааты оперативной памяти
4*кол-во кнопок - байт.
на глобальные переменные
опаньки - руки не из жопаньки:
INT(кол-во_кнопок/8.0) - байт

moka 03.08.2007 16:36

Re: Shift+up
 

Что вы заварили кашу =)
Я просто высказал своё мнение, т.к. расчитываю наперёд, что будет удобнее и т.п.
Да и Johnk, теперь возьми такой код:
Код:

If MouseX()>100
  If MouseX()<150
      If MouseY()>100
        If MouseY()<150
            If MouseHit(1)
              RuntimeError "Hited"
            Endif
        EndIf
      Endif
  EndIf
EndIf

И вот этот код:
Код:

mX=MouseX()
mY=MouseY()
IMh1=MouseHit(1)
If mX>100
  If mX<150
      If mY>100
        If mY<150
            If IMh1
              RuntimeError "Hited"
            EndIf
        EndIf
      EndIf
  EndIf
EndIf

И скажи, что лучше, что быстрее? И что удобнее?
И сразу скажу, в 1 варрианте, если нажать не в зоне, а потом навести, тогда будет нажата, в во 2 варрианте такого бага не будет.
И вообще заканчиваем оффтоп ;)


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

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