kharlashkin Posted August 23, 2014 Author Share 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 Заметил интересный глюк - перестает работать мышь когда нажата любая клавиша. Link to comment Short link Share on other sites More sharing options...
yaotzinv Posted August 23, 2014 Share Posted August 23, 2014 в HandleKeyEvent приходит key - название кнопки isDown - тру или фальш всего два значения, когда какая то кнопка нажата приходит тру , когда какая то кнопка отпущена приходит фальш. допустим KEY_NUMPAD4 пришло в key и в isDown пришло тру - говорит что кнопка нажата? допустим KEY_NUMPAD4 пришло в key и в isDown пришло фальш - говорит что кнопку отпустили? я правильно понимаю что в обработчик прерывания приходит и момент отпускания кнопки? ----------------------- а если orig_handleKeyEvent(self, isDown, key, mods, event) вызывать после всех ваших манипуляций? типа если это по вашей части(ваши кнопки) то манипуляции с камерой пройдут и произойдёт выход. Link to comment Short link Share on other sites More sharing options...
DrWebber Posted August 23, 2014 Share 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 @ Link to comment Short link Share on other sites More sharing options...
yaotzinv Posted August 23, 2014 Share 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 @ Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 23, 2014 Author Share 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 Link to comment Short link Share on other sites More sharing options...
yaotzinv Posted August 23, 2014 Share Posted August 23, 2014 не помню в какой книжке читал, но было написано что лучше садится и начинать кодить чем все время читать;) ну смысл где-то такой там был) Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 23, 2014 Author Share Posted August 23, 2014 (edited) Не работает код от уважаемого DrWebber... Если честно я и не ожидал - в оригинальном скрипте как-то интересно расположены отступы... Edited August 23, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
yaotzinv Posted August 23, 2014 Share 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 это при копировании и вставке у вас поломалось Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 23, 2014 Author Share 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 это при копировании и вставке у вас поломалось Не-не-не, я смотрю оригинальные скрипты - которые нормально игрой кушаются. Про отступы в питоне - знаю, уже пару копей ломал... Link to comment Short link Share on other sites More sharing options...
DrWebber Posted August 23, 2014 Share Posted August 23, 2014 (edited) Не работает код от уважаемого DrWebber... Если честно я и не ожидал - в оригинальном скрипте как-то интересно расположены отступы... Там в update передается dx и dy, один из них всегда неопределен, продумай логику того что надо. Я просто не хочу в этом разбираться. Edited August 23, 2014 by DrWebber Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 23, 2014 Author Share 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 Link to comment Short link Share on other sites More sharing options...
DrWebber Posted August 23, 2014 Share Posted August 23, 2014 Можешь не пробовать, он тоже не будет работать. Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 23, 2014 Author Share Posted August 23, 2014 (edited) Успел до окончания боя - не-а, не работает, может у меня с игрой чего? Зато серебро, заработанное на Т1 растет ;) Edited August 23, 2014 by kharlashkin Link to comment Short link Share on other sites More sharing options...
DrWebber Posted August 23, 2014 Share Posted August 23, 2014 Я написал выше почему. Link to comment Short link Share on other sites More sharing options...
PinkElfant Posted August 28, 2014 Share Posted August 28, 2014 Я люблю C++ за {} ммм какой же он него синтаксис прекраснейший Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 28, 2014 Author Share 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 Подсказал бы кто как этот код вставить вместо родного модом:) Link to comment Short link Share on other sites More sharing options...
kharlashkin Posted August 30, 2014 Author Share Posted August 30, 2014 Вопрос решен, огромное спасибо всем участвовавшим! Отдельное огромное спасибо DrWebber!!! Link to comment Short link Share on other sites More sharing options...
Recommended Posts