找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限觀看附件圖片尊貴會員無限看帖不用回覆伊莉需要你的贊助和支持
火影明日花juliantrge中出siro
韶恩raft滑鼠周興哲jura 065モン娘と4534539

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]靠廢柴技能【狀態

[繁]2.5次元的誘惑13-

[繁]為何我的世界被遺

[繁]曾經、魔法少女和

2024年10月「七龍珠DA

『異世界自殺突擊隊』
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2810|回復: 7
打印上一主題下一主題

[問題]怎麼解決鍵盤延遲?[複製鏈接]

帖子
325
積分
0 點
潛水值
20395 米
跳轉到指定樓層
樓主
發表於 2011-4-3 08:08 AM|只看該作者|倒序瀏覽
最近試了一下做    下樓梯
但橫向的移動一直不順暢

因為按住鍵盤某鍵 會先停頓   才開始自動連續

是否有辦法無停頓

又能在放開的時後瞬間停住嗎@@?

簡單的說  就是

讓鍵盤無延遲" 的方法

要寫在程式裡面的"
分享分享0收藏收藏0支持支持0
兔子一隻~

使用道具檢舉

Rank: 1

帖子
49
積分
199 點
潛水值
3050 米
頭香
發表於 2011-4-5 05:14 AM|只看該作者
會有延遲應該是因為當你按下之時所需做的處理太多了吧~
應該是要想如何改善你程式碼的效能
我個人覺得應該是這樣

使用道具檢舉

帖子
325
積分
0 點
潛水值
20395 米
3
發表於 2011-4-5 05:31 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
恩....並不是指我程式碼的東西@@"

這樣說吧  如果你要連續打20個3

會按著3不放吧?

當按下去後  會先出現第一個三  

然後過一小段時間   才會開始出現連續的3

現在就是希望有辦法用程式

讓那一小段時間消去   能按著3就接連出現3

或是有小方法   不需要去改甚麼設定@@"
...
瀏覽完整內容,請先 註冊登入會員
兔子一隻~
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

Rank: 1

帖子
105
積分
196 點
潛水值
7917 米
4
發表於 2011-4-5 05:55 AM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
回復
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
cnb162434


我剛自己測了一下的確有這個問題
但是那"一小段時間"只有約不到一秒不是嗎@@
想知道什麼原因影響到程式目的

使用道具檢舉

帖子
325
積分
0 點
潛水值
20395 米
5
發表於 2011-4-5 07:04 AM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
本帖最後由 cnb162434 於 2011-4-5 07:09 AM 編輯

阿阿"

就是   下樓梯遊戲

多那一點點時間有差><

各位應該都玩過吧"

下樓梯絕對是不斷的左右左右
然後想停就停

而且是一直按著的左右左右  並不是按一下按一下的


如果沒方法解決

我寫的下樓梯玩起來都不太順暢   
...
瀏覽完整內容,請先 註冊登入會員





兔子一隻~
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。

使用道具檢舉

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
32879 米
6
發表於 2011-4-5 11:25 AM|只看該作者
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
不懂~是不是能貼出大大的  "片斷程式碼"
因為~我寫了不少遊戲~不曾發覺有這問題呀~
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

Rank: 2Rank: 2

帖子
270
積分
445 點
潛水值
16141 米
7
發表於 2011-4-6 10:18 AM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>

  4. #define PE printf

  5. void GotoXY(int x,int y)
  6. {
  7.     HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
  8.         COORD c;
  9.     c.X=x;
  10.     c.Y=y;

  11.     SetConsoleCursorPosition(h,c);
  12.    
  13. }

  14. void WriteC(int c,int x,int y)
  15. {
  16.         HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
  17.         COORD coord;
  18.     coord.X=x;
  19.     coord.Y=y;
  20.         DWORD wbyte=0;
  21.         SetConsoleCursorPosition(h,coord);
  22.         WriteConsole(h,&c,1,&wbyte,NULL);
  23. }

  24. #define MAX_X 40
  25. #define MAX_Y 20
  26. #define MIN_X 0
  27. #define MIN_Y 0



  28. void DrawBox()
  29. {
  30.         int i;
  31.         int j;
  32.         PE("+");
  33.         for(  i = MIN_X+1 ; i < MAX_X ; ++i)
  34.                 PE("-");
  35.         PE("+\n");
  36.         for( j = MIN_Y+1 ; j < MAX_Y ; ++j)
  37.         {
  38.                 PE("|");
  39.                 for( i = MIN_X+1 ; i < MAX_X ; ++i)
  40.                         PE(" ");
  41.                 PE("|\n");
  42.         }
  43.         PE("+");
  44.         for(  i = MIN_X+1 ; i < MAX_X ; ++i)
  45.                 PE("-");
  46.         PE("+\n");

  47. }

  48. int StarX=(MAX_X+MIN_X)/2;
  49. int StarY=(MAX_Y+MIN_Y)/2;

  50. #define STAR '*'

  51. int Move()
  52. {
  53.         if( GetKeyState(0x51)&0x80 ) return 0; // test 'Q'
  54.         int NewX=StarX;
  55.         int NewY=StarY;
  56.         if( GetKeyState(VK_LEFT)&0x80 ) --NewX;  // 使用GetKeyState 取得left key 的狀態
  57.         if( GetKeyState(VK_RIGHT)&0x80 ) ++NewX;
  58.         if( GetKeyState(VK_UP)&0x80 ) --NewY;
  59.         if( GetKeyState(VK_DOWN)&0x80 ) ++NewY;
  60.        
  61.         if( NewX <= MIN_X ) NewX=MIN_X+1;
  62.         if( NewX >= MAX_X ) NewX=MAX_X-1;
  63.         if( NewY <= MIN_Y ) NewY=MIN_Y+1;
  64.         if( NewY >= MAX_Y ) NewY=MAX_Y-1;
  65.         // 位置有改變
  66.         if( NewX!=StarX || NewY!= StarY )
  67.         {
  68.                 WriteC(' ',StarX,StarY);
  69.                 WriteC(STAR,NewX,NewY);
  70.                 StarX=NewX;
  71.                 StarY=NewY;
  72.                 GotoXY(0,MAX_Y+1);
  73.         }
  74.        
  75.         return 1;
  76. }

  77. int main()
  78. {
  79.         DrawBox();
  80.         WriteC(STAR,StarX,StarY);
  81.         GotoXY(0,MAX_Y+1);
  82.         while(Move())
  83.         {
  84.                 Sleep(1000/30);
  85.         }
  86. }
複製代碼
這是window 下的的程式
最主要你必須要用GetKeyState() 取得目前按鑑狀態
當某key 被按下 用GetKeyState(key) 取得的值它的MSB 會被設為1
沒有按下時不會被設定...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
722
積分
2721 點
潛水值
16557 米
8
發表於 2011-4-6 02:45 PM|只看該作者
如果你單純以 KeyDown 事件來處理,就會發生你說的問題
因為 windows 在產生第一個 KeyDown 事件後,會等待一個 delay 時間,然後才產生第二個
並且再等待一個 repeat 時間後,產生第三個,之後就都是等待一個 repeat 時間
這個 delay repeat 的值可以在控制台調整
從程式改的話就是用 SystemParametersInfo 搭配 SPI_SETKEYBOARDDELAY、SPI_SETKEYBOARDSPEED
不過 delay 只有四階段能調整,最快的階段也有 250ms 左右的延遲,對做遊戲的人來說這顯然沒任何意義
...
瀏覽完整內容,請先 註冊登入會員
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部