創作內容

2 GP

Qt搖桿驅動程式(四)

作者:likwueron│2014-02-03 01:50:28│巴幣:4│人氣:330
嗯,既然我們有控制器的類別了,是不是該找個範例來好好利用利用?
Qt的範例中是有幾個遊戲,我拿了俄羅斯方塊來試一試。
該範例位置:%QTDIR%\example\widgets\tetrix
線上版本

本人修改版本(含已編譯程式)

控制器配置:
Start 開始遊戲
Select 暫停
左/右(方向鍵或左類比) 方塊左移/右移
A/叉 方塊加快掉落(下移一行)
B/圈 方塊落至底部
LB/L1 方塊左轉
RB/R1 方塊右轉
因為沒有特別調整,類比搖桿可能會太過敏感

鍵盤/滑鼠配置:
點擊Start 開始遊戲
點擊Pause 暫停
左/右 方塊左移/右移
D 方塊加快掉落(下移一行)
空白鍵 方塊落至底部
方塊左轉
方塊右轉



這一版本採用Qt的事件系統驅動,然後發現在實做上還要再多加些東西。
如果你有觀察結構會發現,我們要控制的物件有兩個:遊戲視窗、方塊的臺面(方塊會出現的中央區域)

在網路上找了一找,發現到,預設的各種事件在子物件不處理的情形下會自動傳遞給親物件。
但是,我們的自訂事件就不是如此了。
這表示我們要自己處理傳遞這件事情。

好在這程式的結構簡單,我們可以使用event filter處理。
具體如下:
class B : QWidget
{
......
public:
    bool eventFilter(QObject*, QEvent*);
......
};

A::A()
: QWidget()
{
......
    B *p_b = new B(this);
    installEventFilter(p_b);
}


這樣一來,在事件傳給A之前會被送到B的eventFilter函式中處理。
首先 QObject 代表者原本要接收事件的物件,而 QEvent 正是該事件。
接下來要怎麼做就很清楚了:把我們想處理的事件處理掉(return true),把其它事件扔出去(return false)。

只是弄到這邊我不免擔心,要是以後有三層結構怎麼辦?
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2331354
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:Qt|搖桿|俄羅斯方塊|事件傳遞

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

2喜歡★iqandadie 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:井蛙、夏蟲、曲士... 後一篇:初四大排隊...

追蹤私訊切換新版閱覽

作品資料夾

dhreekingdon幸運看見的你
給你一顆紅心~讓你能保有一整天的好心情~祝你有個愉快的一天喲(<ゝω・)~❤看更多我要大聲說昨天21:08


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】