真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Qt是一個(gè)不錯(cuò)的庫(kù)。因此在一些場(chǎng)合下,可以基于Qt搭建程序和游戲框架。-創(chuàng)新互聯(lián)

Qt是一個(gè)不錯(cuò)的庫(kù)。因此在一些場(chǎng)合下,可以基于Qt搭建程序和游戲框架。

我們提供的服務(wù)有:成都網(wǎng)站制作、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、順德ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的順德網(wǎng)站制作公司

下面談下Qt作為游戲框架所遇到的問題及解決方法

(一)按鍵

可重載Widget中的keyPressEvent、keyReleaseEvent、mousePressEvent、mouseReleaseEvent、mouseMoveEvent函數(shù)處理

但keyPressEvent有一個(gè)問題。在Windows下(別的環(huán)境我不知道……),按住一個(gè)鍵時(shí),會(huì)先響應(yīng)一次,停頓一會(huì),然后才開始不斷響應(yīng)。在游戲中這種特性的表現(xiàn)是 人物先走一步,停一下,然后繼續(xù)不斷地走。

這個(gè)特性非常影響游戲體驗(yàn),因此通常的解決方法是:press時(shí),設(shè)置某個(gè)flag為true,release時(shí),設(shè)flag為false,然后在游戲渲染循環(huán)中根據(jù)flag的值決定人物的行動(dòng)(即通過忙等待方式而不是中斷方式)

但Qt的鍵盤函數(shù)仍然有一個(gè)問題,它不是“人按下按鍵才觸發(fā)keyPressEvent,彈起按鍵才觸發(fā)keyReleaseEvent”,而是“輸出按鍵消息前觸發(fā)keyPressEvent,輸出后觸發(fā)keyReleaseEvent”。表現(xiàn)為按住一個(gè)鍵時(shí),不斷地press、release、press、release、press、release……

好在Qt提供了另一個(gè)功能,鍵盤事件類QKeyEvent中提供autorepeat判斷,即按住按鍵時(shí)觸發(fā)的那些鍵盤事件屬于autorepeat類型,因此可據(jù)此排除中間的那些press、release

但Qt的鍵盤事件依然有一個(gè)非常囧的現(xiàn)象(我不清楚為啥會(huì)這樣),按住一個(gè)鍵時(shí):

1. 觸發(fā)keyPressEvent,isAutoRepeat()返回false

2. 沒有觸發(fā)keyReleaseEvent,停頓一會(huì)

3. 觸發(fā)keyPressEvent,isAutoRepeat()返回true

4. 觸發(fā)keyReleaseEvent

5. 若沒松開按鍵,isAutoRepeat()返回true,返回3;松開按鍵,isAutoRepeat()返回false

所以有時(shí)需要設(shè)置一個(gè)flag避免第二步造成的影響

最終代碼如下:

keyPress

[cpp] view plaincopy

  1. void MyWidget::keyPressEvent(QKeyEvent* evt)

  2. {

  3.     switch(evt->key()){

  4.         case Qt::Key_W:

  5.             if(!evt->isAutoRepeat()&&!mKeyW){

  6.                 mKeyW=true;

  7.                 //之后是按下w的事件處理語(yǔ)句

  8.             }

  9.             break;

  10.         defaultbreak;

  11.     }

  12.     QWidget::keyPressEvent(evt);

  13. }

[cpp] view plain

  1. void MyWidget::keyPressEvent(QKeyEvent* evt)

  2. {

  3.     switch(evt->key()){

  4.         case Qt::Key_W:

  5.             if(!evt->isAutoRepeat()&&!mKeyW){

  6.                 mKeyW=true;

  7.                 //之后是按下w的事件處理語(yǔ)句

  8.             }

  9.             break;

  10.         default: break;

  11.     }

  12.     QWidget::keyPressEvent(evt);

  13. }

keyRelease

[c-sharp] view plaincopy

  1. void MyWidget::keyReleaseEvent(QKeyEvent* evt)

  2. {

  3.     switch(evt->key()){

  4.         case Qt::Key_W:

  5.             if(mKeyW&&!evt->isAutoRepeat()){

  6.                 mKeyW=false;

  7.                 //之后是松開w的事件處理語(yǔ)句

  8.             }

  9.             break;

  10.         defaultbreak;

  11.     }

  12.     QWidget::keyReleaseEvent(evt);

  13. }

[c-sharp] view plain

  1. void MyWidget::keyReleaseEvent(QKeyEvent* evt)

  2. {

  3.     switch(evt->key()){

  4.         case Qt::Key_W:

  5.             if(mKeyW&&!evt->isAutoRepeat()){

  6.                 mKeyW=false;

  7.                 //之后是松開w的事件處理語(yǔ)句

  8.             }

  9.             break;

  10.         default: break;

  11.     }

  12.     QWidget::keyReleaseEvent(evt);

  13. }

Qt是一個(gè)不錯(cuò)的庫(kù)。因此在一些場(chǎng)合下,可以基于Qt搭建程序和游戲框架。

To be continued.

  • 0

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)頁(yè)題目:Qt是一個(gè)不錯(cuò)的庫(kù)。因此在一些場(chǎng)合下,可以基于Qt搭建程序和游戲框架。-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/diccoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部