簡體   English   中英

Raspberry Pi-Python-游戲桿

[英]Raspberry Pi - Python - joystick

我正在使用Raspberry Pi。

while True:
     if joystick.get_button(0) == 1:
           print ("stop")
     else
           print ("start")

該代碼的目的是:我想在按下按鈕時中斷某些操作。

在運行代碼時,當我按下按鈕並一直給我“開始”時,它會忽略我。 但是,如果我將代碼更改為:

if joystick.get_button(0) == 0:

該程序使我立即“停止”。 (0是get_button(0)的默認值,1表示我按下了按鈕)

循環本身看起來還不錯,所以我認為問題在於您的get_button()方法的行為。 確保它返回正確的值,並且無限循環和狀態檢查不在同一線程中運行。

無論如何,我建議您使用Observer Pattern 基本上,它允許您在不使用無限循環的情況下通過操縱桿按鈕創建反應。

以下代碼應符合您的需求。 每次按下按鈕時,Player類的Joystick類調用方法,因此,每次Joystick更改其狀態時,都將使用此方法。

//OBSERVABLE OBJECT
class Joystick(object):
    def __init__(self):
        self._button = 0
        self._observers = []

    def get_button(self):
        return self._button

    def set_button(self, value):
        for callback in self._observers:
            callback(self._button)

    def bind_to(self, callback):
        self._observers.append(callback)


//OBSERVER OBJECT
class Player(object):
    def __init__(self, controller):
        self._state = 0; //1 - stop, 0 - play
        self.controller.bind_to(self.change_state)

    def change_state(self, new_state):
        self_state = new_state
        if(new_state == 0)
            print 'play'
        else
            print 'stop'

該解決方案將在每次狀態更改時打印一次“ 播放 ”和“ 停止 ”。 然后在您的代碼中將創建一個可觀察的實例:

joystick = new Joystick()

並將其傳遞給觀察者:

player = new Player(joystick)

這樣,當您啟動setter函數時:

joystick.set_button(0)        

游戲桿將自動更改玩家實例中的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM