鱼C论坛

 找回密码
 立即注册
查看: 3385|回复: 2

程序一直在try异常处理 , 不进入if语句

[复制链接]
发表于 2023-1-18 01:41:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 pipixia434 于 2023-1-18 03:02 编辑


运行后可以正常检测出xbox手柄 但是一直在
        while not self.isQuit:
            for event_ in pygame.event.get():
        try:
            self.Update(self)  
不进入if 判断
就是说第一个程序可以进到elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
第二个code反而进不去了


用这个程序可以跑

  1. import pygame

  2. # 模块初始化
  3. pygame.init()
  4. pygame.joystick.init()

  5. # 若只连接了一个手柄,此处带入的参数一般都是0
  6. joystick = pygame.joystick.Joystick(0)
  7. # 手柄对象初始化
  8. joystick.init()

  9. done = False

  10. clock = pygame.time.Clock()

  11. while not done:
  12.         for event_ in pygame.event.get():
  13.                 # 退出事件
  14.                 if event_.type == pygame.QUIT:
  15.                         done = True
  16.                 # 按键按下或弹起事件
  17.                 elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
  18.                         buttons = joystick.get_numbuttons()
  19.                         # 获取所有按键状态信息
  20.                         for i in range(buttons):
  21.                                 button = joystick.get_button(i)
  22.                                 print("button " + str(i) +": " + str(button))
  23.                 # 轴转动事件
  24.                 elif event_.type == pygame.JOYAXISMOTION:
  25.                         axes = joystick.get_numaxes()
  26.                         # 获取所有轴状态信息
  27.                         for i in range(axes):
  28.                                 axis = joystick.get_axis(i)
  29.                                 print("axis " + str(i) +": " + str(axis))
  30.                 # 方向键改变事件
  31.                 elif event_.type == pygame.JOYHATMOTION:
  32.                         hats = joystick.get_numhats()
  33.                         # 获取所有方向键状态信息
  34.                         for i in range(hats):
  35.                                 hat = joystick.get_hat(i)
  36.                                 print("hat " + str(i) +": " + str(hat))
  37.                        
  38.         joystick_count = pygame.joystick.get_count()
  39.        
  40. pygame.quit()

复制代码

知乎上看到的一个类似的
但是写进class 就只能进不去if判断
一直在try 语句
不执行  elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:

  1. import sys, os, threading, pygame, time, math

  2. # axis0 0-L-R
  3. # axis1 0-U-D
  4. # button9 0

  5. # axis3 1-L-R
  6. # axis4 1-U-D
  7. # button10 1

  8. # axis2 LT
  9. # axis5 RT

  10. # button4 LD
  11. # button5 RD

  12. # button6 SELECT
  13. # button7 START

  14. # button0 A
  15. # button1 B
  16. # button3 X
  17. # button4 Y

  18. # hat0(0,0) = hat0(number,number)  LEFT =-1 RIGHT=1 UP=1 DOWN =-1
  19. class JoystickKey:
  20.     def __init__(self):
  21.         super(JoystickKey, self).__init__()
  22.         self.A = 0
  23.         self.B = 1
  24.         self.X = 3
  25.         self.Y = 4
  26.         self.LB = 6
  27.         self.RB = 7
  28.         self.LT = 8
  29.         self.RT = 9
  30.         self.SELECT = 10
  31.         self.START = 11
  32.         self.LEFTAXISBT = 12
  33.         self.RIGHTAXISBT = 13
  34.         self.C = 14
  35.         self.Z = 15

  36.         self.M1 = 16
  37.         self.M2 = 17
  38.         self.M3 = 2
  39.         self.M4 = 5

  40.         self.LEFT_AXIS = 0 or 1
  41.         self.RIGHT_AXIS = 2 or 3
  42.         self.LEFT_AXIS_RIGHT_LEFT = 0
  43.         self.LEFT_AXIS_UP_DOWN = 1
  44.         self.RIGHT_AXIS_RIGHT_LEFT = 2
  45.         self.RIGHT_AXIS_UP_DOWN = 3
  46.         self.LT_AXIS = 5
  47.         self.RT_AXIS = 4


  48. class XboxController(threading.Thread):
  49.     def __init__(self):
  50.         super(XboxController, self).__init__()
  51.         self.isQuit = False
  52.         self.startTime = time.time()

  53.         self.joystickKey = JoystickKey()
  54.         pygame.init()
  55.         pygame.joystick.init()
  56.         self.clock = pygame.time.Clock()
  57.         self.joystick_count = pygame.joystick.get_count()
  58.         if self.joystick_count == 0:
  59.             pass

  60.         self.joystick = pygame.joystick.Joystick(0)
  61.         self.joystick.init()
  62.         self.joystick_name = self.joystick.get_name()
  63.         print(self.joystick_name)

  64.     def get_runtime(self):
  65.         return abs(self.startTime - time.time())

  66.     def _map_(self, value, in_minVal=0, in_maxVal=1, out_minVal=0, out_maxVal=255):
  67.         a = in_maxVal - in_minVal
  68.         b = out_maxVal - out_minVal
  69.         c = a / b
  70.         d = in_minVal + (value / c)
  71.         return int(d)

  72.     def run(self):
  73.         try:

  74.             self.Start(self)
  75.         except:
  76.             print('start not defined')

  77.         while not self.isQuit:
  78.             for event_ in pygame.event.get():  # 获取事件
  79.                 if event_.type == pygame.QUIT:
  80.                     self.isQuit = True
  81.                 elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
  82.                     self.buttons = self.joystick.get_numbuttons()
  83.                     for _key in range(self.buttons):
  84.                         key_status = self.joystick.get_button(_key)
  85.                         tmp_key = None
  86.                         if key_status == 1:
  87.                             tmp_key = _key
  88.                             try:
  89.                                 self.KeyDown(self, _key)
  90.                             except:
  91.                                 print("KeyDown Error!")
  92.                                 pass
  93.                         elif key_status == 0 and tmp_key == _key:
  94.                             try:
  95.                                 self.KeyUp(self, _key)
  96.                             except:
  97.                                 print("KeyUp Error!")
  98.                                 pass
  99.                 elif event_.type == pygame.JOYHATMOTION:
  100.                     hats = self.joystick.get_numhats()
  101.                     for i in range(hats):
  102.                         hat = self.joystick.get_hat(i)
  103.                         try:
  104.                             self.Hat(self, hat)
  105.                         except:
  106.                             pass

  107.                     pass
  108.                 elif event_.type == pygame.JOYAXISMOTION:
  109.                     axis = self.joystick.get_numaxes()
  110.                     for i in range(axis):
  111.                         axis = self.joystick.get_axis(i)
  112.                         try:
  113.                             self.Axis(self, i, axis)
  114.                         except:
  115.                             pass

  116.                     pass
  117.             try:
  118.                 self.Update(self)
  119.             except:
  120.                 print('update not defined')
  121.         try:
  122.             # pygame.quit()
  123.             pygame.joystick.quit()
  124.             self.Quit(self)
  125.         except:
  126.             print('quit not defined')
  127.         return

  128.     # def console_clear():
  129.     #     if os.name == 'posix':
  130.     #         _ = os.system('clear')
  131.     #     else:
  132.     #         _ = os.system('cls')


  133. if __name__ == '__main__':
  134.     def Update(content):
  135.         print('process update! %s'%(xboxController.get_runtime()))
  136.         return


  137.     def Start(content):
  138.         # print('process started!')
  139.         return


  140.     def Quit(content):
  141.         # print('process quit!')
  142.         return


  143.     def KeyDown(content, key):
  144.         # print('按键按下 %s \r\n'%(str(key)))
  145.         if (key == content.joystickKey.A):
  146.             print('hello world')
  147.         return


  148.     def KeyUp(content, key):
  149.         # print('按键释放 %s \r\n'%(str(key)))
  150.         return


  151.     def Hat(content, hat):
  152.         (y, x) = hat
  153.         print('x = %s,y = %s' % (x, y))
  154.         return


  155.     def Axis(content, axis_index, axis):
  156.         if (axis != 0.0):
  157.             if axis_index == content.joystickKey.RIGHT_AXIS:
  158.                 print('RIGTH_AXIS')
  159.             elif axis_index == content.joystickKey.LEFT_AXIS:
  160.                 print('LEFT_AXIS')
  161.         print('axis index is %s ,value is %s' % (axis_index, content._map_(axis)))
  162.         return


  163.     xboxController = XboxController()
  164.     xboxController.isQuit = False
  165.     # 注册方法
  166.     xboxController.Update = Update
  167.     xboxController.Start = Start
  168.     xboxController.Quit = Quit
  169.     xboxController.KeyDown = KeyDown
  170.     xboxController.KeyUp = KeyUp
  171.     xboxController.Hat = Hat
  172.     xboxController.Axis = Axis
  173.     # 启动线程
  174.     xboxController.start()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-18 09:27:41 | 显示全部楼层
这个 start 的 s 应该是小写才对吧,你写了大写s

    def run(self):
        try:

            self.Start(self)
        except:
            print('start not defined')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-18 10:42:50 | 显示全部楼层
isdkz 发表于 2023-1-18 09:27
这个 start 的 s 应该是小写才对吧,你写了大写s

    def run(self):

不是那个start函数
是下面的Start()
def Start(content):
        # print('process started!')
        return
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 05:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表