鱼C论坛

 找回密码
 立即注册
查看: 2613|回复: 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反而进不去了


用这个程序可以跑
import pygame

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

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

done = False

clock = pygame.time.Clock()

while not done:
        for event_ in pygame.event.get():
                # 退出事件
                if event_.type == pygame.QUIT:
                        done = True
                # 按键按下或弹起事件
                elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
                        buttons = joystick.get_numbuttons()
                        # 获取所有按键状态信息
                        for i in range(buttons):
                                button = joystick.get_button(i)
                                print("button " + str(i) +": " + str(button))
                # 轴转动事件
                elif event_.type == pygame.JOYAXISMOTION:
                        axes = joystick.get_numaxes()
                        # 获取所有轴状态信息
                        for i in range(axes):
                                axis = joystick.get_axis(i)
                                print("axis " + str(i) +": " + str(axis))
                # 方向键改变事件
                elif event_.type == pygame.JOYHATMOTION:
                        hats = joystick.get_numhats()
                        # 获取所有方向键状态信息
                        for i in range(hats):
                                hat = joystick.get_hat(i)
                                print("hat " + str(i) +": " + str(hat))
                        
        joystick_count = pygame.joystick.get_count()
        
pygame.quit()
知乎上看到的一个类似的
但是写进class 就只能进不去if判断
一直在try 语句
不执行  elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
import sys, os, threading, pygame, time, math

# axis0 0-L-R
# axis1 0-U-D
# button9 0

# axis3 1-L-R
# axis4 1-U-D
# button10 1

# axis2 LT
# axis5 RT

# button4 LD
# button5 RD

# button6 SELECT
# button7 START

# button0 A
# button1 B
# button3 X
# button4 Y

# hat0(0,0) = hat0(number,number)  LEFT =-1 RIGHT=1 UP=1 DOWN =-1
class JoystickKey:
    def __init__(self):
        super(JoystickKey, self).__init__()
        self.A = 0
        self.B = 1
        self.X = 3
        self.Y = 4
        self.LB = 6
        self.RB = 7
        self.LT = 8
        self.RT = 9
        self.SELECT = 10
        self.START = 11
        self.LEFTAXISBT = 12
        self.RIGHTAXISBT = 13
        self.C = 14
        self.Z = 15

        self.M1 = 16
        self.M2 = 17
        self.M3 = 2
        self.M4 = 5

        self.LEFT_AXIS = 0 or 1
        self.RIGHT_AXIS = 2 or 3
        self.LEFT_AXIS_RIGHT_LEFT = 0
        self.LEFT_AXIS_UP_DOWN = 1
        self.RIGHT_AXIS_RIGHT_LEFT = 2
        self.RIGHT_AXIS_UP_DOWN = 3
        self.LT_AXIS = 5
        self.RT_AXIS = 4


class XboxController(threading.Thread):
    def __init__(self):
        super(XboxController, self).__init__()
        self.isQuit = False
        self.startTime = time.time()

        self.joystickKey = JoystickKey()
        pygame.init()
        pygame.joystick.init()
        self.clock = pygame.time.Clock()
        self.joystick_count = pygame.joystick.get_count()
        if self.joystick_count == 0:
            pass

        self.joystick = pygame.joystick.Joystick(0)
        self.joystick.init()
        self.joystick_name = self.joystick.get_name()
        print(self.joystick_name)

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

    def _map_(self, value, in_minVal=0, in_maxVal=1, out_minVal=0, out_maxVal=255):
        a = in_maxVal - in_minVal
        b = out_maxVal - out_minVal
        c = a / b
        d = in_minVal + (value / c)
        return int(d)

    def run(self):
        try:

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

        while not self.isQuit:
            for event_ in pygame.event.get():  # 获取事件
                if event_.type == pygame.QUIT:
                    self.isQuit = True
                elif event_.type == pygame.JOYBUTTONDOWN or event_.type == pygame.JOYBUTTONUP:
                    self.buttons = self.joystick.get_numbuttons()
                    for _key in range(self.buttons):
                        key_status = self.joystick.get_button(_key)
                        tmp_key = None
                        if key_status == 1:
                            tmp_key = _key
                            try:
                                self.KeyDown(self, _key)
                            except:
                                print("KeyDown Error!")
                                pass
                        elif key_status == 0 and tmp_key == _key:
                            try:
                                self.KeyUp(self, _key)
                            except:
                                print("KeyUp Error!")
                                pass
                elif event_.type == pygame.JOYHATMOTION:
                    hats = self.joystick.get_numhats()
                    for i in range(hats):
                        hat = self.joystick.get_hat(i)
                        try:
                            self.Hat(self, hat)
                        except:
                            pass

                    pass
                elif event_.type == pygame.JOYAXISMOTION:
                    axis = self.joystick.get_numaxes()
                    for i in range(axis):
                        axis = self.joystick.get_axis(i)
                        try:
                            self.Axis(self, i, axis)
                        except:
                            pass

                    pass
            try:
                self.Update(self)
            except:
                print('update not defined')
        try:
            # pygame.quit()
            pygame.joystick.quit()
            self.Quit(self)
        except:
            print('quit not defined')
        return

    # def console_clear():
    #     if os.name == 'posix':
    #         _ = os.system('clear')
    #     else:
    #         _ = os.system('cls')


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


    def Start(content):
        # print('process started!')
        return


    def Quit(content):
        # print('process quit!')
        return


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


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


    def Hat(content, hat):
        (y, x) = hat
        print('x = %s,y = %s' % (x, y))
        return


    def Axis(content, axis_index, axis):
        if (axis != 0.0):
            if axis_index == content.joystickKey.RIGHT_AXIS:
                print('RIGTH_AXIS')
            elif axis_index == content.joystickKey.LEFT_AXIS:
                print('LEFT_AXIS')
        print('axis index is %s ,value is %s' % (axis_index, content._map_(axis)))
        return


    xboxController = XboxController()
    xboxController.isQuit = False
    # 注册方法
    xboxController.Update = Update
    xboxController.Start = Start
    xboxController.Quit = Quit
    xboxController.KeyDown = KeyDown
    xboxController.KeyUp = KeyUp
    xboxController.Hat = Hat
    xboxController.Axis = Axis
    # 启动线程
    xboxController.start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

    def run(self):
        try:

            self.Start(self)
        except:
            print('start not defined')
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 21:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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