Q&A
実現したいこと
- Pygameとゲームパッドを用いた値の変更(ボタン長押しによって値が増減し続ける)
前提
Pythonで、ゲームパッドのボタン入力によって値が増減するプログラムを作成しております。
Pygameというモジュールを使用し、ゲームパッドのボタン入力(押した or 離した)を取得します。
下記コードで動作しないわけではないのですが、動作が不安定なため改善したいと考えております。
初めての質問となりますが、どうぞよろしくお願いいたします。
発生している問題・エラーメッセージ
- 動作が安定しません。ボタンを押した際、処理が始まる場合とそうでない場合があります。
該当のソースコード
Python
1import pygame 2from pygame.locals import * 3import threading 4import time 5 6#Pygame関連の初期化 7pygame.init() 8pygame.joystick.init() 9joys = pygame.joystick.Joystick(0) 10joys.init() #ゲームパッドの初期化 11 12 13#ボタンを押した際に取得するe.buttonの値 14""" 15LBボタン:4 16RBボタン:5 17""" 18 19n1 = 512 #変更する値の初期値 20switch = 0 #ボタンから指が離れた状態の値を定義 21 22#ボタンを押したか離したかの判定 23def OnOff(): 24 while True: 25 global switch 26 for e in pygame.event.get(): 27 if e.type == pygame.locals.JOYBUTTONDOWN: #ボタンが押された場合 28 switch = 1 29 if e.type == pygame.locals.JOYBUTTONUP: #ボタンから指が離れた場合 30 switch = 0 31 32#0.5秒ごとに値をターミナルに表示 33def Display(): 34 while True: 35 print('現在値:{}'.format(n1)) 36 time.sleep(0.5) 37 38#ボタン押し離しの判定と現在値表示の開始 39Th1 = threading.Thread(target=OnOff) 40Th2 = threading.Thread(target=Display) 41Th1.start() 42Th2.start() 43 44#ボタン入力による値の変更 45while True: 46 for e in pygame.event.get(): 47 if e.type == pygame.locals.JOYBUTTONDOWN: 48 pushed = int(e.button) 49 50 if pushed == 4: 51 while switch == 1: #ボタンから指が離れるまで繰り返す 52 n1 += -1 53 if n1 < 0: 54 n1 = 0 #下限値の設定 55 time.sleep(0.2) #0.2秒ごとに1減少 56 57 if pushed == 5: 58 while switch == 1: #ボタンから指が離れるまで繰り返す 59 n1 += 1 60 if n1 > 1023: 61 n1 = 1023 #上限値の設定 62 time.sleep(0.2) #0.2秒ごとに1増加 63
試したこと
ボタン入力が受付けられる場合とそうでない場合があるのではと考え、以下の内容を試しましたが、改善できませんでした。
・値の増減を繰り返すtime.sleep(0.2)の前後にゲームパッド初期化(joys.init())を入れる
・各処理へのtime.sleep()の追加、および値の変更
補足情報(FW/ツールのバージョンなど)
Pythonのバージョン : Python 3.5.6
OS : Ubuntu 22.04 LTS 64ビット
メモリ : 16GB
プロセッサ : Intel® Core™ i7-10750H CPU @ 2.60GHz × 12
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/17 06:20