「D言語ゲームライブラリ「dHell2」」の編集履歴(バックアップ)一覧に戻る
D言語ゲームライブラリ「dHell2」 - (2007/02/13 (火) 19:04:00) の編集履歴(バックアップ)
D言語ゲームライブラリ「dHell2」
これは何?
D言語で簡単にゲームが作れるようにライブラリ「dHell」の続編です。
OpenGL使っているのに、2Dゲーム専用だったりします。
OpenGL使っているのに、2Dゲーム専用だったりします。
謝辞
- このアプリはD言語を使ってます。(version 1.0.0)
- SDL(Simple DirectMedia Layer)を使っています。
- OpenGLを使ってます。
- shinichiro_hさんのD - porting(http://shinh.skr.jp/d/porting.html)のD言語用SDL/OpenGLヘッダファイルを使っています。
- hell.bmpはtaroさんの著作物です(http://www5.atwiki.jp/yaruhara/pages/45.html)
- おめがさんの「RectWinderNTGL」のコードをかなり使わせていただきました。
- フォントにはおめがさんの「font.bmp」を使わせていただきました
目次
- D言語ゲームライブラリ「dHell2」
- これは何?
- 謝辞
- ダウンロード
- 更新履歴
- 既知の問題
- dHellであった機能
- dHell2の新機能
- Dコンパイラのインストールなど
- ビルド方法
- 使い方
- 特殊なキーの動作
- 「dHell2」リファレンス
- Hell_init(char[] caption, int width, int height, bool fullscreen=false)
- Hell_quit()
- Hell_setCaption(...)
- Hell_write(...)
- Hell_write(Exception e)
- Hell_loadTexture(char[] key, char[] filepath, int[3] mask=[-1, 0, 0])
- Hell_drawTexture(char[] key, float cx, float cy, int ox=0, int oy=0, int ow=0, int oh=0, float dx=1.0f, float dy=1.0f, float rot=0, int r=0xFF, int g=0xFF, int b=0xFF, int a=0xFF)
- Hell_drawTextureEx(char[] key, float cx, float cy, int ox=0, int oy=0, int ow=0, int oh=0, float dx=1.0f, dy=1.0f, float rot=0, int r=0xFF, int g=0xFF, int b=0xFF, int a=0xFF)
- Hell_hasTexture(char[] key)
- Hell_capture(char[] key)
- Hell_setAlpha(char[] key, int alpha)
- Hell_getMouseX
- Hell_getMouseY
- Hell_isPressMouse
- Hell_isPushMouse
- Hell_isPressKey
- Hell_isPushKey
- Hell_loadWAV(char[] key, char[] path)
- Hell_playWAV(char[] key, int loops=0, int channel=-1)
- Hell_stopWAV()
- Hell_disposeWAV(char[] key=null)
- bool Hell_isPressJKey(int id)
- bool Hell_isPushJKey(int id)
- bool Hell_isPressJButton(int id)
- bool Hell_isPushJKey(int id)
- Hell_isPressEnter()/Hell_isPushEnter()
- Hell_isPressCancel()/Hell_isPushCancel()
- Hell_isPressMenu()/Hell_isPushMenu()
- Hell_isPressUp()/Hell_isPushUp()
- Hell_isPressLeft()/Hell_isPushLeft()
- Hell_isPressDown()/Hell_isPushDown()
- Hell_isPressRight()/Hell_isPushRight()
- Hell_playBgm(char[] path, int loops=-1, int ms=0)
- Hell_stopBgm(int ms=0)
- Hell_isPlayBgm()
- Hell_drawRect(float x=0, float y=0, float dx=0, float dy=0, float width=0, float rot=0, int r=0x00, int g=0x00, int b=0x00, int a=0xFF)
- Hell_drawRectEx(float cx=0, float cy=0, float dx=0, float dy=0, float width=0, float rot=0, int r=0x00, int g=0x00, int b=0x00, int a=0xFF)
- void Hell_drawLine(float x1, float y1, float x2, float y2, int width=1, int r=0x00, int g=0x00, int b=0x00, int a=0xFF)
- Hell_drawTriangle(float x, float y, float radius, float rot=0, int width=1, int r=0x00, int g=0x00, int b=0x00, int a=0xFF)
- Hell_drawCircle(float cx, float cy, float radius, int width=1, int r=0x00, int g=0x00, int b=0x00, int a=0xff)
- Hell_drawFont(char[] msg, float x, float y, float zoom=1.0f, int r=0xff, int g=0xff, int b=0xff, int a=0xff)
- Hell_drawFontEx(float x, float y, float zoom=1.0f, int r=0xff, int g=0xff, int b=0xff, int a=0xff, ...)
- Hell_sin(float rad)
- Hell_cos(float rad)
- Hell_atan2(float y, float x)
- Hell_sinEx(float deg)
- Hell_cosEx(float deg)
- Hell_atan2Ex(float y, float x)
- Hell_deg2rad(float deg)
- Hell_rad2deg(float rad)
- Hell_randSeed(uint seed, uint index)
- Hell_rand(uint range)
- Hell_randf(float range)
- Hell_randInt(int begin, int end)
- Hell_choice(int[] array)
- Hell_shuffle(int[] array)
- Hell_MessageBox(wchar[] message, wchar[] caption="", uint type=MB_OK)
ダウンロード
ここからライブラリ一式をダウンロードします。
dHellであった機能
dHellではこんな感じでした。
- 画像読込・描画(BMPのみ)
- BGM読込・再生(WAV/OGGのみ)
- 効果音読込・再生(WAVのみ)
- キーイベント(マウス・キーボード・ジョイスティック)のハンドリング
- フォントの描画(asciiのみ)
dHell2の新機能
こんな機能が追加されました。
- 画像の拡大縮小・回転(Hell_drawTexture/Hell_drawTextureEx)
- 画像の加算合成(Hell_setAlpha)
- 線分/三角形の描画・回転
- それぞれの描画をRGBAを指定して描画できるように
(ようやく、普通のゲームライブラリっぽくなった……?)
ビルド方法
build.batをテキストファイルで開いて、
D言語コンパイラ・リンカのパスを設定します。
(パスを通してあるのであれば、必要ありません)
D言語コンパイラ・リンカのパスを設定します。
(パスを通してあるのであれば、必要ありません)
で、build.batを実行します。
使い方
「test.d」を編集していきます。
なんか色々ありますが、最低限必要なコードはこれだけです。
なんか色々ありますが、最低限必要なコードはこれだけです。
import hell; void main() { try { // Hellシステム初期化(キャプション"Hell" 640x480) Hell_init("Hell", 640, 480); // ゲームループ開始 while(true) { // 描画エリアの消去 Hell_begin(); // 画面更新 Hell_update(); // 33ms待つ Hell_wait(33); } } catch(Exception e) { // 例外をログに書き込み Hell_write(e); } finally { // Hellシステム終了 Hell_quit(); } }
注意が必要なのは、「try~catch~finally」です。
ウィンドウが閉じられたときには、Hell_wait()が例外を返します。
その場合、catchして、ログの出力をし、Hell_quit()で終了します。
ウィンドウが閉じられたときには、Hell_wait()が例外を返します。
その場合、catchして、ログの出力をし、Hell_quit()で終了します。
画像ファイルが存在しなかった場合など、「run.log」にエラーが書き込まれるので、
それを参照します。
それを参照します。
特殊なキーの動作
- F5キー:ボスが来た! ⇒ウィンドウ最小化
- F9キー:ウィンドウモード・フルスクリーン切替(使用不可)
- F10キー:マウスカーソル表示切替
- F12キー:スクリーンショットをscreenshot.bmpで保存(使用不可)
- ESCキー:アプリケーションを終了します。
「dHell2」リファレンス
Hell_init(char[] caption, int width, int height, bool fullscreen=false)
dHellを初期化します。
- パラメータ
- caption ウィンドウタイトル文字列
- width 画面縦サイズ
- height 画面横サイズ
- fullscreen フルスクリーンフラグ
Hell_quit()
dHellの終了処理を行います。
Hell_write(char[] msg)
ログファイル「run.log」にメッセージを書き込みます。
Hell_write(int msg)
ログファイル「run.log」に数値を書き込みます。
Hell_write(Exception e)
ログファイル「run.log」に例外情報の書き込みを行います。
Hell_drawRect(int x=0, int y=0, int dx=0, int dy=0, int width=0, float rot=0, int r=0x00, int g=0x00, int b=0x00, int a=0xff)
矩形を描画します。
- パラメータ
- x X座標
- y Y座標
- dx 幅
- dy 高さ
- width 線の太さ(0で塗りつぶし)
- r R成分
- g G成分
- b B成分
- a A成分
Hell_drawTriangle(float x, float y, float radius, float rot=0, int width=1, int r=0x00, int g=0x00, int b=0x00, int a=0xff)
三角形を描画します。
- x X座標(中心)
- y Y座標(中心)
- radius 半径
- rot 回転角度(0~360)
- width 線の太さ(0で塗りつぶし)
- r R成分
- g G成分
- b B成分
- a A成分
Hell_loadTexture(char[] key, char[] filepath, int[3] mask=[-1, 0, 0])
BMPをテクスチャとして読みこみます。
- パラメータ
- key 画像のキー(Hell_drawTextureで使います)
- filepath 画像ファイルのパス
- mask 抜き色(mask[0]に「-1」で抜き色なし。「-2」で座標指定)
Hell_drawTexture(char[] key, float cx, float cy, int ox=0, int oy=0, int ow=0, int oh=0, float dx=1.0f, float dy=1.0f, float rot=0, int r=255, int g=255, int b=255)
BMPを描画します。
ox,oy,ow,ohにそれぞれ「0」を指定すると、BMP全体を描画します。
ox,oy,ow,ohにそれぞれ「0」を指定すると、BMP全体を描画します。
- パラメータ
- key キー(Hell_loadTextureで読み込み済みのもの)
- x X座標
- y Y座標
- ox 切り取り開始X座標
- oy 切り取り開始Y座標
- ow 切り取る幅
- oh 切り取る高さ
- dx 拡大サイズ(X)
- dy 拡大サイズ(Y)
- rot 回転角度(0~360。左回り)
- r マスク色(赤)
- g マスク色(緑)
- b マスク色(青)
Hell_drawTextureEx(char[] key, float cx, float cy, int ox=0, int oy=0, int ow=0, int oh=0, flo
Hell_drawTexture()は左上座標を指定していましたが、これは中心座標を指定して描画する関数です。
Hell_setAlpha(char[] key, int alpha)
アルファ値を設定します。
- パラメータ
- alpha アルファ値(HELL_ALPHA_DISABLE/HELL_ALPHA_NORMAL/HELL_ALPHA_ADD)
- HELL_ALPHA_DISABLE :αブレンドしない
- HELL_ALPHA_NORMAL :半透明
- HELL_ALPHA_ADD :加算
- alpha アルファ値(HELL_ALPHA_DISABLE/HELL_ALPHA_NORMAL/HELL_ALPHA_ADD)
Hell_getMouseX
マウスのX座標を取得します。
- 戻り値 --- マウス座標X
Hell_getMouseY
マウスのY座標を取得します。
- 戻り値 --- マウス座標Y
Hell_isPressMouse
マウスを押し続けているかどうかを判定するフラグを取得します。
- 戻り値 --- マウスを押し続けているかどうかのフラグ
●使い方
if(Hell_isPressMouse() & HELL_BUTTON_LEFT) { printf("press left"); } if(Hell_isPressMouse() & HELL_BUTTON_MIDDLE) { printf("press middle"); } if(Hell_isPressMouse() & HELL_BUTTON_RIGHT) { printf("press right"); }
Hell_isPushMouse
マウスをそのフレームに押したかどうかを判定するフラグを取得します。
- 戻り値 --- マウスをそのフレームに押したかどうかのフラグ
●使い方
if(Hell_isPushMouse() & HELL_BUTTON_LEFT) { printf("push left"); } if(Hell_isPushMouse() & HELL_BUTTON_MIDDLE) { printf("push middle"); } if(Hell_isPushMouse() & HELL_BUTTON_RIGHT) { printf("push right"); }
Hell_isPressKey
キーを押し続けているかどうかを判定するフラグを取得します。
- 戻り値 --- キーを押し続けているかどうかのフラグ
●使い方
if(Hell_isPressMouse(HELL_DOWN)) { printf("press down"); } if(Hell_isPressMouse(HELL_RIGHT)) { printf("press right"); } if(Hell_isPressMouse(HELL_LEFT)) { printf("press left"); }
Hell_isPushKey
キーをそのフレームに押したかどうかを判定するフラグを取得します。
- 戻り値 --- キーをそのフレームに押したかどうかのフラグ
●使い方
if(Hell_isPushMouse(HELL_RETURN)) { printf("push return"); } if(Hell_isPushMouse(SDLK_z)) { printf("push z"); } if(Hell_isPushMouse(HELL_UP)) { printf("push up"); }
Hell_loadWAV(char[] key, char[] path)
SE(WAVファイル)を読み込みます
- パラメータ
- key キー(Hell_playWAVで使います)
- path サウンドファイルのパス
Hell_playWAV(char[] key, int loops=0)
SE(WAVファイル)を再生します
- パラメータ
- key キー
- loops ループ回数。0で1回再生。(-1で無限ループ)
Hell_stopWAVAll()
SE(WAVファイル)の再生を全て停止します。
bool Hell_isPressJKey(int id)
ジョイスティックの十字キーを押しているかどうかを調べます。
- 戻り値---ジョイスティックの十字キーを押しているかどうか
●使い方
if(Hell_isPressJKey(HELL_J_UP)) { printf("press up"); } if(Hell_isPressJKey(HELL_J_DOWN)) { printf("press down"); } if(Hell_isPressJKey(HELL_J_LEFT)) { printf("press left"); } if(Hell_isPressJKey(HELL_J_RIGHT)) { printf("press right"); }
bool Hell_isPushJKey(int id)
ジョイスティックの十字キーを押したかどうかを調べます。
- 戻り値---ジョイスティックの十字キーを押したかどうか
●使い方
if(Hell_isPushJKey(HELL_J_UP)) { printf("push up"); } if(Hell_isPushJKey(HELL_J_DOWN)) { printf("push down"); } if(Hell_isPushJKey(HELL_J_LEFT)) { printf("push left"); } if(Hell_isPushJKey(HELL_J_RIGHT)) { printf("push right"); }
bool Hell_isPressJButton(int id)
ジョイスティックのボタンを押しているかどうかを調べます。
- 戻り値---ジョイスティックのボタンを押しているかどうか
●使い方
if(Hell_isPressJButton(0)) { printf("press 1button"); } if(Hell_isPressJButton(1)) { printf("press 2button"); } if(Hell_isPressJButton(2)) { printf("press 3button"); } if(Hell_isPressJButton(3)) { printf("press 4button"); }
bool Hell_isPushJKey(int id)
ジョイスティックのボタンを押したかどうかを調べます。
- 戻り値---ジョイスティックのボタンを押したかどうか
●使い方
if(Hell_isPushJButton(0)) { printf("push 1button"); } if(Hell_isPushJButton(1)) { printf("push 2button"); } if(Hell_isPushJButton(2)) { printf("push 3button"); } if(Hell_isPushJButton(3)) { printf("push 4button"); }
Hell_playBgm(char[] path, int loops=-1, int ms=0)
BGMを再生します
- パラメータ
- path ファイルパス
- loops ループ回数(-1で無限ループ)
- フェードイン時間(ms)
Hell_stopBgm(int ms=0)
BGMを停止します
- パラメータ
- フェードアウト時間(ms)
Hell_drawFont(char[] msg, int x, int y, float zoom=1.0f, int alpha=255)
フォントの描画(asciiのみです)
- パラメータ
- msg ascii文字列
- x,y 描画開始位置
- zoom 拡大サイズ(1.0fで32x48)
- r R成分
- g G成分
- b B成分
- a A成分