我使用D和SDL創建一個簡單的遊戲。我正在嘗試創建一個SDL封裝器,以便我不直接使用它。現在我試圖創建自己的Input類,儘可能遠離SDL的輸入。不過,我在爲鍵盤鍵分配正確的枚舉值時遇到了一些麻煩。將枚舉賦值給其他枚舉值
到目前爲止,我已經嘗試過,爲鍵盤按鍵分配SDL的枚舉,因爲這似乎是最簡單的,但它似乎沒有工作,沒有打印到控制檯。
--SDLInput--
import derelict.sdl.sdl;
import SDLApp;
class SDLInput
{
private:
SDLApp sdlapp;
SDL_Event event;
public:
this()
{
event = sdlapp.event;
}
bool KeyPressed(SDLKey key)
{
if(event.type == SDL_KEYDOWN && event.key.keysym.sym == key)
return true;
else
return false;
}
bool KeyReleased(SDLKey key)
{
if(event.type == SDL_KEYUP && event.key.keysym.sym == key)
return true;
else
return false;
}
}
--DPInput--
import SDLInput;
import derelict.sdl.sdl; //Eventually I'd get rid of this, only here for testing
class DPInput
{
private:
SDLInput sdlinput;
public:
enum DPKey
{
DPK_SPACE = SDLK_SPACE
}
this()
{
sdlinput = new SDLInput;
}
bool KeyPressed(DPKey key)
{
return sdlinput.KeyPressed(key);
}
}
--DPApp--
import SDLApp;
import DPInput;
import DPTime;
import std.stdio;
class DPApp
{
//...
void Run()
{
Init();
Loop();
Cleanup();
}
void Loop()
{
dptime.InitNextTime();
while(gameRunning)
{
if(sdlapp.PollQuit())
gameRunning = false;
UpdateGame();
Render();
dptime.DPDelay(dptime.TimeLeft());
dptime.UpdateNextTime();
}
}
void UpdateGame()
{
if(dpinput.KeyPressed(dpinput.DPKey.DPK_SPACE))
writeln("DPAPP: SPACE PRESSED");
}
}
//..main這裏調用的run()
感謝您的回覆。你說得對,這個事件並不包含當前的最新事件。這是我第一次嘗試自己構建遊戲(我在書籍或教程的幫助下完成了其他遊戲),因此我希望代碼在很多錯誤的情況下都很糟糕。我編輯了我如何處理事件,現在我得到輸出到控制檯。我將返回並實現您的事件處理結構,它看起來更乾淨。 – RedShft 2012-03-02 18:50:44
酷!保持樂趣:) – kraybit 2012-03-03 08:36:36