kharlashkin 239 #209126 Posted August 23, 2014 Попробовал не помогло - вот код: import Keys from AvatarInputHandler.control_modes import ArcadeControlMode from debug_utils import * orig_handleKeyEvent = ArcadeControlMode.handleKeyEvent def mod_handleKeyEvent(self, isDown, key, mods, event = none): retVal = orig_handleKeyEvent(self, isDown, key, mods, event) if isDown: if key == Keys.KEY_NUMPAD4: dx = -4.0 if key == Keys.KEY_NUMPAD6: dx = 4.0 if key == Keys.KEY_NUMPAD8: dy = -4.0 if key == Keys.KEY_NUMPAD2: dy = 4.0 self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return True else: if key == Keys.KEY_NUMPAD4: dx = 0.0 if key == Keys.KEY_NUMPAD6: dx = 0.0 if key == Keys.KEY_NUMPAD8: dy = 0.0 if key == Keys.KEY_NUMPAD2: dy = 0.0 self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return True return retVal Заметил интересный глюк - перестает работать мышь когда нажата любая клавиша. Share this post Link to post Short link Share on other sites
yaotzinv 145 #209149 Posted August 23, 2014 в HandleKeyEvent приходит key - название кнопки isDown - тру или фальш всего два значения, когда какая то кнопка нажата приходит тру , когда какая то кнопка отпущена приходит фальш. допустим KEY_NUMPAD4 пришло в key и в isDown пришло тру - говорит что кнопка нажата? допустим KEY_NUMPAD4 пришло в key и в isDown пришло фальш - говорит что кнопку отпустили? я правильно понимаю что в обработчик прерывания приходит и момент отпускания кнопки? ----------------------- а если orig_handleKeyEvent(self, isDown, key, mods, event) вызывать после всех ваших манипуляций? типа если это по вашей части(ваши кнопки) то манипуляции с камерой пройдут и произойдёт выход. Share this post Link to post Short link Share on other sites
DrWebber 5 #209150 Posted August 23, 2014 (edited) лол)) Не обижайся, но тебе стоит почитать какую-нибудь литературу по программированию и попробовать написать с 0 что-нибудь свое, просто чтобы понять как "это" работает. В том коде, что ты написал дело до return retVal никогда не дойдет, у тебя все время будет return True. import Keys from AvatarInputHandler.control_modes import ArcadeControlMode from debug_utils import * orig_handleKeyEvent = ArcadeControlMode.handleKeyEvent def mod_handleKeyEvent(self, isDown, key, mods, event = none): retVal = orig_handleKeyEvent(self, isDown, key, mods, event) if isDown: if key == Keys.KEY_NUMPAD4: dx = -4.0 if key == Keys.KEY_NUMPAD6: dx = 4.0 if key == Keys.KEY_NUMPAD8: dy = -4.0 if key == Keys.KEY_NUMPAD2: dy = 4.0 else: if key == Keys.KEY_NUMPAD4: dx = 0.0 if key == Keys.KEY_NUMPAD6: dx = 0.0 if key == Keys.KEY_NUMPAD8: dy = 0.0 if key == Keys.KEY_NUMPAD2: dy = 0.0 if key in (Keys.KEY_NUMPAD4, Keys.KEY_NUMPAD2, Keys.KEY_NUMPAD6, Keys.KEY_NUMPAD8): self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return retVal Edited August 23, 2014 by DrWebber 1 Share this post Link to post Short link Share on other sites
yaotzinv 145 #209151 Posted August 23, 2014 (edited) def mod_handleKeyEvent(self, isDown, key, mods, event = none): i=0 if isDown: if key == Keys.KEY_NUMPAD4: dx = -4.0 i=1 if key == Keys.KEY_NUMPAD6: dx = 4.0 i=1 if key == Keys.KEY_NUMPAD8: dy = -4.0 i=1 if key == Keys.KEY_NUMPAD2: dy = 4.0 i=1 else: if key == Keys.KEY_NUMPAD4: dx = 0.0 i=1 if key == Keys.KEY_NUMPAD6: dx = 0.0 i=1 if key == Keys.KEY_NUMPAD8: dy = 0.0 i=1 if key == Keys.KEY_NUMPAD2: dy = 0.0 i=1 if i==1: self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) тут думайте сами нужно ли вам чтоб вызывалась оригинальный метод, тогда сюда его добавте. ну или выше этого, хз... else: return orig_handleKeyEvent(self, isDown, key, mods, event) вот вот человек верно написал у вас return True выход с обработчика и до низу то не доходит до return retVal. Edited August 23, 2014 by yaotzinv 1 Share this post Link to post Short link Share on other sites
kharlashkin 239 #209154 Posted August 23, 2014 (edited) лол)) Не обижайся, но тебе стоит почитать какую-нибудь литературу по программированию и попробовать написать с 0 что-нибудь свое, просто чтобы понять как "это" работает. В том коде, что ты написал дело до return retVal никогда не дойдет, у тебя все время будет return True. Ну так я в самом начале и написал, что довольно с меня копошения на месте с python, проще заплатить 5-10-100 $ за нужный функционал, расковырять код - чтобы примерно понимать что к чему, дабы не доставать потом создателя с обновами и пользоваться. Просто человеческое любопытство и постоянно новые советы дают толчки пробовать чего-то самому, хотя можно пойти х3 опыт посбивать вместо скриптов python :) За танки перед ТВ не садился уже дня 4-е... Хотя на постоянных пробах чего-то, на Т1 накатал 100к серебра. вот вот человек верно написал у вас return True выход с обработчика и до низу то не доходит до return retVal. Я как то на подсознательном уровне догадывался, что как-то так нужно или с отступами были ошибки - сейчас попробую. Edited August 23, 2014 by kharlashkin Share this post Link to post Short link Share on other sites
yaotzinv 145 #209155 Posted August 23, 2014 не помню в какой книжке читал, но было написано что лучше садится и начинать кодить чем все время читать;) ну смысл где-то такой там был) Share this post Link to post Short link Share on other sites
kharlashkin 239 #209156 Posted August 23, 2014 (edited) Не работает код от уважаемого DrWebber... Если честно я и не ожидал - в оригинальном скрипте как-то интересно расположены отступы... Edited August 23, 2014 by kharlashkin Share this post Link to post Short link Share on other sites
yaotzinv 145 #209158 Posted August 23, 2014 так это как раз язык такой что отступы должны быть на своих местах, если не на своих то работать не будет, отступы ломаются иногда - там не сложно кто шарит их легко восстановить. https://www.google.com.ua/search?q=%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D1%8B+%D0%B2+python&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a&channel=np&source=hp&gfe_rd=cr&ei=yAT5U8DRDcnb8geS7YGgDQ это при копировании и вставке у вас поломалось Share this post Link to post Short link Share on other sites
kharlashkin 239 #209159 Posted August 23, 2014 так это как раз язык такой что отступы должны быть на своих местах, если не на своих то работать не будет, отступы ломаются иногда - там не сложно кто шарит их легко восстановить. https://www.google.com.ua/search?q=%D0%BE%D1%82%D1%81%D1%82%D1%83%D0%BF%D1%8B+%D0%B2+python&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a&channel=np&source=hp&gfe_rd=cr&ei=yAT5U8DRDcnb8geS7YGgDQ это при копировании и вставке у вас поломалось Не-не-не, я смотрю оригинальные скрипты - которые нормально игрой кушаются. Про отступы в питоне - знаю, уже пару копей ломал... Share this post Link to post Short link Share on other sites
DrWebber 5 #209161 Posted August 23, 2014 (edited) Не работает код от уважаемого DrWebber... Если честно я и не ожидал - в оригинальном скрипте как-то интересно расположены отступы... Там в update передается dx и dy, один из них всегда неопределен, продумай логику того что надо. Я просто не хочу в этом разбираться. Edited August 23, 2014 by DrWebber Share this post Link to post Short link Share on other sites
kharlashkin 239 #209162 Posted August 23, 2014 (edited) import Keys from AvatarInputHandler.control_modes import ArcadeControlMode from debug_utils import * orig_handleKeyEvent = ArcadeControlMode.handleKeyEvent def mod_handleKeyEvent(self, isDown, key, mods, event = none): retVal = orig_handleKeyEvent(self, isDown, key, mods, event) dx = None dy = None if isDown: if key == Keys.KEY_NUMPAD4: dx = -4.0 if key == Keys.KEY_NUMPAD6: dx = 4.0 if key == Keys.KEY_NUMPAD8: dy = -4.0 if key == Keys.KEY_NUMPAD2: dy = 4.0 else: if key == Keys.KEY_NUMPAD4: dx = 0.0 if key == Keys.KEY_NUMPAD6: dx = 0.0 if key == Keys.KEY_NUMPAD8: dy = 0.0 if key == Keys.KEY_NUMPAD2: dy = 0.0 if key in (Keys.KEY_NUMPAD4, Keys.KEY_NUMPAD2, Keys.KEY_NUMPAD6, Keys.KEY_NUMPAD8) and dx is not None and dy is not None: self._ArcadeControlMode__cam.update(dx, dy, 0, True, True, False if dx == dy == 0.0 else True) return retVal А так? Я пробовал задавать нулевые значения dx = dy = 0.0, но сейчас попробую именно Ваш код :) Я вот думаю может - просто я не там копаю? Тем более этот непонятный глюк с мышью... Edited August 23, 2014 by kharlashkin Share this post Link to post Short link Share on other sites
DrWebber 5 #209163 Posted August 23, 2014 Можешь не пробовать, он тоже не будет работать. Share this post Link to post Short link Share on other sites
kharlashkin 239 #209164 Posted August 23, 2014 (edited) Успел до окончания боя - не-а, не работает, может у меня с игрой чего? Зато серебро, заработанное на Т1 растет ;) Edited August 23, 2014 by kharlashkin Share this post Link to post Short link Share on other sites
DrWebber 5 #209165 Posted August 23, 2014 Я написал выше почему. Share this post Link to post Short link Share on other sites
PinkElfant 25 #209831 Posted August 28, 2014 Я люблю C++ за {} ммм какой же он него синтаксис прекраснейший Share this post Link to post Short link Share on other sites
kharlashkin 239 #209900 Posted August 28, 2014 Я написал выше почему. Я не понял что там к чему, подробнее объяснили бы... Я попробовал модифицировать оригинальный скрипт, вот так в принципе, то что мне нужно: 'control_modes.py' if BigWorld.isKeyDown(Keys.KEY_NUMPAD4) and cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -0.25 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 0.25 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True if BigWorld.isKeyDown(Keys.KEY_NUMPAD6) and cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -3.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 3.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True if BigWorld.isKeyDown(Keys.KEY_NUMPAD2) and cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -0.25 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 0.25 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True if BigWorld.isKeyDown(Keys.KEY_NUMPAD8) and cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -3.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 3.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True if cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 self.__cam.update(dx, dy, dz, True, True, False if dx == dy == dz == 0.0 else True) return True Хотя проще и удобнее по нажатию кнопок ввести коэффициенты для dx/dy. Попробовал через коэффициенты - намного лучше, потому как работает смешивание (например средне вправо и быстро вниз или медленно вниз и быстро вправо). 'control_modes.py' if cmdMap.isFiredList((CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT, CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT, CommandMapping.CMD_CM_CAMERA_ROTATE_UP, CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN, CommandMapping.CMD_CM_INCREASE_ZOOM, CommandMapping.CMD_CM_DECREASE_ZOOM), key): dx = dy = dz = 0.0 kx = ky = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_LEFT): dx = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_RIGHT): dx = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_UP): dy = -1.0 if cmdMap.isActive(CommandMapping.CMD_CM_CAMERA_ROTATE_DOWN): dy = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_INCREASE_ZOOM): dz = 1.0 if cmdMap.isActive(CommandMapping.CMD_CM_DECREASE_ZOOM): dz = -1.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD4): kx = 0.2 if BigWorld.isKeyDown(Keys.KEY_NUMPAD2): ky = 0.2 if BigWorld.isKeyDown(Keys.KEY_NUMPAD6): kx = 3.0 if BigWorld.isKeyDown(Keys.KEY_NUMPAD8): ky = 3.0 self.__cam.update(dx * kx, dy * ky, dz, True, True, False if dx == dy == dz == 0.0 else True) return True Подсказал бы кто как этот код вставить вместо родного модом:) Share this post Link to post Short link Share on other sites
kharlashkin 239 #210069 Posted August 30, 2014 Вопрос решен, огромное спасибо всем участвовавшим! Отдельное огромное спасибо DrWebber!!! Share this post Link to post Short link Share on other sites