LoginSignup
6
6

More than 5 years have passed since last update.

GoでWindowsゲーム開発(DxLib)メモ

Posted at

GoでWindowsゲーム開発?

GoからDXライブラリを使うのを試してみる。

※DXライブラリ
http://dxlib.o.oo7.jp/

「とりあえずやってみた」レベルで、Goに適した作りになっているとかそういったアレは全くありません。

ソース

ビルド

go get golang.org/x/text/encoding/japanese
go build

結果

画像を読み込んで動かしているだけです。

ss02.gif

メインループ

このような雰囲気。

dxlib.DxLib_Init()
dxlib.SetDrawScreen(-2)
for {
    if dxlib.ProcessMessage() != 0 {
        break
    }
    dxlib.ClearDrawScreen()

    // something...

    dxlib.ScreenFlip()
}

dxlib.DxLib_End()

DxLib関数へのアクセス

DxLib.dllを使います。

var (
    mod = syscall.NewLazyDLL("DxLib.dll")

    dx_DxLib_Init       = mod.NewProc("dx_DxLib_Init")
    dx_DxLib_End        = mod.NewProc("dx_DxLib_End")
    dx_SetWindowText    = mod.NewProc("dx_SetWindowText")
    //
    // ...
    //
)
func DxLib_Init() int {
    var r, _, _ = dx_DxLib_Init.Call()
    return int(r)
}

func DxLib_End() int {
    var r, _, _ = dx_DxLib_End.Call()
    return int(r)
}

func SetWindowText(newTitle string) int {
    var r, _, _ = dx_SetWindowText.Call(pstr(newTitle))
    return int(r)
}

pstrはとりあえず作った便利関数。

func convertStringToCp932(str string) string {
    r, _, err := transform.String(japanese.ShiftJIS.NewEncoder(), str)
    if err != nil {
        panic(err)
    }
    return r
}

func pstr(str string) uintptr {
    cp932str := syscall.StringBytePtr(convertStringToCp932(str))
    return uintptr(unsafe.Pointer(cp932str))
}

これで、DxLib_Init、DxLib_End、SetWindowTextが普通に呼べるようになりました。あとはこれの積み重ねでいける?

サンプルソースでは、以下の関数を使えるようにしてあります。

  • dx_ChangeWindowMode
  • dx_DxLib_Init
  • dx_DxLib_End
  • dx_ProcessMessage
  • dx_SetWindowText
  • dx_DrawCircle
  • dx_LoadGraph
  • dx_DrawGraph
  • dx_DrawExtendGraph
  • dx_WaitTimer
  • dx_ScreenFlip
  • dx_SetDrawScreen
  • dx_ClearDrawScreen
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6