Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

Нажатие двух клавиш   Найти похожие ветки 

 
KiberKot ©   (2006-04-25 17:48) [0]

Подскажите, как отследить нажатие двух клавиш вот в такой строке
if diks [DIK_space] and $80 <> 0 then begin


 
XProger ©   (2006-04-25 18:01) [1]

if (diks[DIK_space] and $80 <> 0) and (diks[DIK_RETURN] and $80 <> 0) then begin


 
KiberKot ©   (2006-04-25 18:29) [2]

Блин.
Я лепил что то типа
if diks [DIK_space] and [DIK_UP] and $80 <> 0 then begin
if diks [DIK_space and DIK_UP] and $80 <> 0 then begin


 
Cash ©   (2006-04-25 22:39) [3]

Интересно, а зачем diks[DIK_space] and $80 использовать?
Это же падение быстроты работы.
Почему бы не делать: diks[DIK_space] = $80?
(я понимаю, что это всего один And, но без него мой DInput класс стал
работать чуть ли ни в 1,5 раза быстрее, а клавиши также отсекает)


 
XProger ©   (2006-04-25 22:48) [4]

Cash, учи булеву алгебру...


 
KiberKot ©   (2006-04-26 00:17) [5]


> XProger ©   (25.04.06 22:48) [4]
> Cash, учи булеву алгебру..

Что ты этим хотел сказать ?


 
XProger ©   (2006-04-26 00:23) [6]

KiberKot, и тебя это тоже касается ;)
and не сопоставимо с простым сравнением


 
KiberKot ©   (2006-04-26 00:24) [7]

Я в курсе, он сопоставляется с И


 
KiberKot ©   (2006-04-26 00:26) [8]

Я просто подумал о том что ты щитаеш что Cash не прав про вывод


 
Mortem ©   (2006-04-26 00:27) [9]

Виндовые сообщения рулят! DirectInput маздай! (:


 
KiberKot ©   (2006-04-26 00:32) [10]


> Mortem ©

А вот меня чета не прет рывками перемещаться


 
Mortem ©   (2006-04-26 01:56) [11]


> KiberKot ©   (26.04.06 00:32) [10]

Прикинь, меня тоже! Но это ты явно с чем-то попутал... Небось VCL"ем балуешься?


 
KiberKot ©   (2006-04-26 02:15) [12]

Щас я DirectInput балуюсь, а как ты стандартными способами скорости добиваешся?


 
XProger ©   (2006-04-26 07:58) [13]

KiberKot, учи булеву алгебру, разработчики не спроста восьмой бит сверяют при проверке нажатия...
WinAPI может практически полностью заменить DI, а иногда даже больше (поддержка двух мышей)


 
Cash ©   (2006-04-26 10:15) [14]

XProger ©   (26.04.06 00:23) [6]:
> and не сопоставимо
Ёу, чел, посвети в чем тут фишка!
(ответ твой мне вобще не нужен, я и без того знаю то что означает эта фраза)

KiberKot ©   (26.04.06 00:26) [8]:
> ...щитаеш что Cash не прав...
Этот человек считает, что я во всем не прав. Мне фиолетово!
Я знаю что лучше и как правильнее, мои цели не навязывать заблуждений
и не посылать на поисковики. Я посоветовал, меня послали, мне все равно!


 
Mortem ©   (2006-04-26 13:03) [15]


> Cash ©   (26.04.06 10:15) [14]

"Какой ты чувствиткльный Томми!" (с)Снетч


 
KiberKot ©   (2006-04-26 14:12) [16]


> Cash ©  


> diks[DIK_space] = $80?

Ну а можно так AND-ы позаменять во всех циклах. Инпут работает нормально
, а вот вывод на экран тормозит, т.к. у меня для каждого объекта куча
циклов с проверками, и если на экране появляется много объектов, то
начинаются еормоза. Надобы циклы как нибудь ускорить.
А вобще, если я выведу 1 цикл на 100 элементов и 50 циклов по 2 элемента,
то какой способ будет быстрее ???? Я спросил из за того, что у меня в
отрисовке куча циклов для одних и техже элементов, и может
если я это все засуну в один, то будет побыстрее работать

ЗЫ вернее циклы у меня не в отрисовке, а в обновлении экрана


 
Mortem ©   (2006-04-26 14:13) [17]

А чем отличается отрисовка и обновление экрана?


 
KiberKot ©   (2006-04-26 14:14) [18]


> XProger ©   [13]
> KiberKot, учи булеву алгебру

А где про эту самую алгебру можно документации достать, я вобще про нее
в первый раз слышу


 
KiberKot ©   (2006-04-26 14:18) [19]


> А чем отличается отрисовка и обновление экрана?

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


 
KiberKot ©   (2006-04-26 14:23) [20]

Вы бы мне про книгу ответили
Cash прикинь, я временно дезиртирую на OGL :)


 
Don Nikola ©   (2006-04-26 14:37) [21]

>Cash
>(я понимаю, что это всего один And, но без него мой DInput класс стал
>работать чуть ли ни в 1,5 раза быстрее, а клавиши также отсекает)

Одно-тактовый and тормозит метод в полтора раза?! 8O
Да ты великий гуру программления познавший дзен.
Можно на сырцы посмотреть, а то может я столько в жизни пропустил и не знаю.


 
KiberKot ©   (2006-04-26 14:47) [22]


> Don Nikola ©

Я чет не понял, and  тормозит или всетаки не тормозит ???


 
Don Nikola ©   (2006-04-26 15:00) [23]

2KiberKot:
AND это одна из комманд проца, которая выполняется за минимально возможное время. Если у человека программа тормозит из-за одного and, то он или великий гуру или не совсем понимает что у него написано.


 
KiberKot ©   (2006-04-26 15:03) [24]


> Don Nikola ©

Ну в принципе логично.
А вот скажи мне Николна, ты книжки читаеш (OGL) ?


 
Cash ©   (2006-04-26 15:09) [25]

KiberKot ©   (26.04.06 14:47) [22]:
Нет, and не тормозит, а наобарот работает быстрее... е-если
к нему правильно приложить руки!
Операция в [1] полностью верна, так же как и верна операция
эквивалентности (=) в [3]. Но обе они нерациональны с точки зрения
организации алгоритма. (наминального быстродействия не будет)
Рационален подход с and, приделанным к нужному месту, я (как и мой
учитель в подобных ситуациях) сложу руки и промолчу о нем. Потаму как
это приложение слишком тревиально для простого объяснения, надо
догадаться.

ЗЫ: предпод за такие вопросы автоматы раздает, но за всю его практику
таким образом автоматы получили только двое или трое челов.

> Cash прикинь, я временно дезиртирую на OGL :)
И правильно, кстати! Посиди на опене, это кульная штука. :)

Вот по DirectX я бы тебе сразу сказал, а опен, я чёт не знаю, как говорится
Краснов, но ты же сам видел, примеры у него в Бобруйск. На GameDev сходи,
посмотри там в каталоге книг.


 
KiberKot ©   (2006-04-26 15:19) [26]


>  На GameDev

Но ты же говорл что ОГЛ знаеш, значит о чем то учил (логично ?)
А на GameDev я был и вот нашел три варианта, которые перечислил,
кстати Краснова ОГЛ уже фиг где найдеш , за тем фактом, что этой книге уже 6 лет

Если кто захочет сказать про книги, то давайте в тот топик


 
Mortem ©   (2006-04-26 15:20) [27]

Вполне нормально по Краснову читься, хотя примеры немного переделывать приходится...
А ваще, примеры можно брать тут: http://code.darthman.com (:


 
KiberKot ©   (2006-04-26 15:26) [28]

Mortem
Кстати про code.darthman.com, это ты там админиш, а то я вот незнаю куда
положить свою мега гамму для скачивания :)
ЗЫ а это только гаммаделам положено смайлики перевернутые рисовать ? (:


 
Cash ©   (2006-04-26 15:28) [29]

KiberKot ©   (26.04.06 15:19) [26]:
Хм-м, я опен учил своими двумя, без книжек.
(Я и товарищ Брежнев очень похожи, мы оба не читаем книг :)

А с Don Nikola © я бы не согласилися!
Это где это and - это команда процессора?
(надо бы не приператься, а точно указать в какой из семантических
конструкций слово and является командой процессора)


 
Don Nikola ©   (2006-04-26 15:31) [30]

2Cash:
P.S.:
x - byte
if (x and $80)=0 then ...
компилиться в test al,$80
if x=$80 then ...
компилиться в cmp al,$80
Твой выигрыш в производительности не от этого 100%.
P.P.S.:
Если в sdk help пишут "If an element"s high bit is on, the key was down at the moment of the call" значит нужно именно старший бит пользовать, иначе иногда можно встретить такой неуловимый баг, что неделю просидишь.
P.P.P.S.:
Хороший у тебя препод, добрый. Другой бы за такой код в извращенной форме бы после занятий.


 
KiberKot ©   (2006-04-26 15:32) [31]


> Cash ©

Ну вобще в ассемблере and используется, а он использует машинные команды


 
Cash ©   (2006-04-26 15:41) [32]

KiberKot ©   (26.04.06 15:32) [31]:
Вот именно! and на 100% это and только в асме.
В Делфе это побитовая операция.
(что быстрее вычитание, сравнение и проверка флага или операция с
моментальным занесением результата во флаг)
При этом в [1] производится ряд операций которые друг другу не нужны.

Don Nikola ©:
test - это оператор или макрокоманда?
Какие числа в себя включает маска $80?
(это не придирки или чего то там, это направление к "верному" решению)


 
Don Nikola ©   (2006-04-26 15:43) [33]

2Cash:
>Это где это and - это команда процессора?
>(надо бы не приператься, а точно указать в какой из семантических
>конструкций слово and является командой процессора)

and - это команда всех x86.
паскаль, да и другие языки обычно преобразуют твой код и как вышеуказанно if ... and ... преобразовывается в другие команды.
Если же написать x:=x and $80 то в асме получиться and al,$80.
Более подробно о команда цпу можно посмотреть http://www.agner.org/assem/ и на intel.com там не помню где куча pdf"ов с описанием процев и их команд лежала.
Для изучения команд 386 можно взять с http://www.whitetown.com/ru/ng/index.php3?lang=1&what=6 TechHelp!6


 
Don Nikola ©   (2006-04-26 15:49) [34]

2Cash:
Я не успеваю ответить, а ты новый вопрос задаешь ;)

>test - это оператор или макрокоманда?

Это команда проца, если мне не веришь возьми дебагер с http://www.ollydbg.de и посмотри во что delphi код превращает. Довольно часто бывает менее "правильный" текст на delphi компилится в неоптимальный код.

>Какие числа в себя включает маска $80?
>(это не придирки или чего то там, это направление к "верному" решению)

Если я правильно тебя понял, то $80-$FF 128-255


 
KiberKot ©   (2006-04-26 15:50) [35]

Ну про [1] [3] понятно, там будет работать не за счет исправления and на =
а за счет сокращения алгаритма  
f diks [DIK_space] and $80 <> 0 then begin - сначала вычисляет [DIK_space] and $80
, а потом сравнивает с 0.
В [3] сразу сравнивает два значения.

А вот что будет, если нельзя две проверки в одну вместить, пример
if (x<0) and (x>640) то как тогда писать and или =


 
Don Nikola ©   (2006-04-26 15:51) [36]

>Довольно часто бывает более "правильный" текст на delphi компилится в неоптимальный код.
;)


 
Cash ©   (2006-04-26 15:53) [37]

Don Nikola ©   (26.04.06 15:49) [34]:
> Это команда проца
Верю, ляпнул не подумавши. :)

> то $80-$FF 128-255
Да, 128 и выше. То есть вполне есть резон использовать логическую
операцию ">="


 
Don Nikola ©   (2006-04-26 15:57) [38]

2KiberKot:
Он не вичисляется и сравнивается, а совмещается в одну команду.

>А вот что будет, если нельзя две проверки в одну вместить, пример
>if (x<0) and (x>640) то как тогда писать and или =

То и будет, проверка-jump, проверка-jump.
Кстати, если нужно проверить равенство переменной небольшим значениям(0-255), то выгоднее писать if x in [1,2,3,4..8] then delphi там с битами начинает играть и получает весьма занятный код.


 
Cash ©   (2006-04-26 15:58) [39]

KiberKot ©   (26.04.06 15:50) [35]:
> if (x<0) and (x>640) то
То есть выход за пределы? (смутило то, что X одновременно и меньше 0 и
больше 640!)

Наверное?:
if (x < 0)or(x > 640) then...


 
Don Nikola ©   (2006-04-26 15:59) [40]

2Cash:
Что and, что >= разницы в результате нет. Но для понимания исходника лучше использовать то, что основано на sdk. Если там написано проверьте старший бит, то лучше так и делать, что бы потом не тратить пару минут на "а что здесь, собственно, происходит?"



Страницы: 1 2 вся ветка

Форум: "Игры";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.041 c
2-1173223246
Gelikon
2007-03-07 02:20
2007.04.01
Как заставить Panel мигать через определённый интервал времени!!!


11-1153458626
DVK
2006-07-21 09:10
2007.04.01
Глюк в MCK TKOLMainMenu?


15-1172656454
IMHO
2007-02-28 12:54
2007.04.01
Зенит купил Тимощука за 20 миллионов долларов!!!


15-1173185865
Сергей М.
2007-03-06 15:57
2007.04.01
FastReport 3.x, шаблон отчета по форме "Книга продаж"


1-1171015510
DelphiLexx
2007-02-09 13:05
2007.04.01
FreeAndNil





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский