博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手柄按键显示器
阅读量:7053 次
发布时间:2019-06-28

本文共 3793 字,大约阅读时间需要 12 分钟。

#起因 朋友叫我去做一个可以用来在直播时候显示手柄按了哪些键的软件

#过程 ##官方例子 Google了下找到了pygame中有joystick包可以控制手柄。有全套控制手柄的方法,下图是实例的界面

##项目实现

import pygame, os# Define some colorsBLACK    = (   0,   0,   0)WHITE    = ( 255, 255, 255)pygame.init()size = [100, 50]screen = pygame.display.set_mode(size,pygame.RESIZABLE)pygame.display.set_caption("joystick show")class Btn(pygame.sprite.Sprite):    def __init__(self,image_path, alpha, pos):        super(Btn, self).__init__()        self.image = pygame.image.load(image_path)        self.alpha = alpha        self.postion = posCURRENT_PATH = os.path.dirname(__file__)KEY_Y = Btn(os.path.join(CURRENT_PATH,'y.png'), 60, (60,0))KEY_X = Btn(os.path.join(CURRENT_PATH,'x.png'), 60, (45,15))KEY_A = Btn(os.path.join(CURRENT_PATH,'a.png'), 60, (60,30))KEY_B = Btn(os.path.join(CURRENT_PATH,'b.png'), 60, (75,15))KEY_U = Btn(os.path.join(CURRENT_PATH,'u.png'), 60, (16,5))KEY_D = Btn(os.path.join(CURRENT_PATH,'d.png'), 60, (16,34))KEY_L = Btn(os.path.join(CURRENT_PATH,'l.png'), 60, (0,21))KEY_R = Btn(os.path.join(CURRENT_PATH,'r.png'), 60, (29,21))keys_btn = pygame.sprite.Group()keys_pos = pygame.sprite.Group()keys_btn.add(KEY_Y)keys_btn.add(KEY_X)keys_btn.add(KEY_A)keys_btn.add(KEY_B)keys_pos.add(KEY_L)keys_pos.add(KEY_R)keys_pos.add(KEY_U)keys_pos.add(KEY_D)#Loop until the user clicks the close button.done = False    # Used to manage how fast the screen updatesclock = pygame.time.Clock()# Initialize the joysticksdef joystick_init():    pygame.joystick.init()joystick_init()    def blit_alpha(target, source, location, opacity):        x = location[0]        y = location[1]        temp = pygame.Surface((source.get_width(), source.get_height())).convert()        temp.blit(target, (-x, -y))        temp.blit(source, (0, 0))        temp.set_alpha(opacity)                target.blit(temp, location)while done==False:    # EVENT PROCESSING STEP    for event in pygame.event.get():        if event.type == pygame.QUIT:             done=True # Flag that we are done so we exit this loop        if event.type == pygame.JOYAXISMOTION:            x,y = joystick.get_axis(0),joystick.get_axis(1)            for key_pos in keys_pos:                key_pos.alpha = 60            if x > 0.1:                KEY_R.alpha = 255                if y > 0.1:                    KEY_D.alpha = 255                elif  y < -0.1:                    KEY_U.alpha = 255            elif x < -0.1:                KEY_L.alpha = 255                if y > 0.1:                    KEY_D.alpha = 255                elif  y < -0.1:                    KEY_U.alpha = 255        if event.type == pygame.JOYBUTTONDOWN:            if event.button == 0:                KEY_A.alpha = 255            elif event.button == 1:                KEY_B.alpha = 255            elif event.button == 2:                KEY_X.alpha = 255            elif event.button == 3:                KEY_Y.alpha = 255        if event.type == pygame.JOYBUTTONUP:            if event.button == 0:                KEY_A.alpha = 60            elif event.button == 1:                KEY_B.alpha = 60            elif event.button == 2:                KEY_X.alpha = 60            elif event.button == 3:                KEY_Y.alpha = 60                screen.fill(BLACK)    for key_btn in keys_btn:        blit_alpha(screen,key_btn.image,key_btn.postion, key_btn.alpha)    for key_pos in keys_pos:        blit_alpha(screen,key_pos.image,key_pos.postion, key_pos.alpha)        joystick = pygame.joystick.Joystick(0)    joystick.init()         pygame.display.flip()    # Limit to 20 frames per second    clock.tick(10)    pygame.quit ()复制代码

![6OJZQ61{@T14L)EQ9K)%6]M.gif](http://upload-images.jianshu.io/upload_images/5555510-f94f0ea8f5a2bac0.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

转载于:https://juejin.im/post/5a7714195188257a7f1d813e

你可能感兴趣的文章
基于策略的双出口NAT负载均衡和备份
查看>>
然而大部分期权并没有什么用
查看>>
windows下常用命令
查看>>
把Hyper-V Server 2008R2装进USB存储设备
查看>>
编程乐趣:C#实现12306自动登录(2013年11月27)
查看>>
Lync Server Front部署(并置中介)
查看>>
Bind+DLZ+MySQL智能DNS的正向解析和反向解析实现方法
查看>>
Android Studio第三十五期 - 定时器弱引用+Service的写法
查看>>
安装和配置SQL Server 2016 With SP1
查看>>
VR產業鏈與人才從業方向
查看>>
吐槽苹果的革新 iOS 7
查看>>
理解并演示:SNMP简单网络管理协议(200-120新考点)
查看>>
RHEL5中安装Oracle11gR2修改用户SHELL限制、环境配置、内核参数
查看>>
服务器双网卡导致的网络故障及解决方案
查看>>
强力促销推动移动购物崛起
查看>>
软件外包相关职业规划
查看>>
几种数据库建模工具推荐(包含开源版)
查看>>
大中型网站集群架构企业级高标准全自动实战项目征集
查看>>
7.5 TableLayout布局详解
查看>>
【虚拟化实战】存储设计之二LUN Sizing
查看>>