2

私はこれをどこでも調べてみましたが、できることはすべて試しましたが、SDL を Go で動作させることができません。これが私のコードです。少しずさんですが、出発点として、テストするために、それを機能させたかっただけです。私はそれをクリーンアップして、後で不要な #defines をすべて取り除くつもりでした。

package main

// #cgo LDFLAGS: -lSDL -lSDL_main -lSDL_image
// #include <stdio.h>
// #include <SDL/SDL.h>
// #include <SDL/SDL_main.h>
// #include <SDL/SDL_image.h>
import "C"

import "runtime"

func init() {
runtime.LockOSThread()
}

func main() {
var image* C.SDL_Surface
var screen* C.SDL_Surface
C.SDL_Init( C.SDL_INIT_EVERYTHING )
screen = C.SDL_SetVideoMode(640, 480, 32, C.SDL_SWSURFACE)
hello = C.SDL_LoadBMP( "moe.bmp" )
C.SDL_BlitSurface(hello, nil, screen, nil)
C.SDL_Flip(screen)
C.SDL_Delay(2000)
C.SDL_FreeSurface(hello)
C.SDL_Quit()
}

これにより、「コマンドライン引数」エラーが発生します。「SDL_LoadBMP」が宣言されていません(この関数で最初に使用されます)。検索や魔法の量では修正されません。必要な場合は、SDL 1.0.2 を使用して Ubuntu を使用しています (と思います)。

Go用の唯一のSDL 1ラッパーは2年前のもので、2つの良いものはSDL 2用であるため、ラッパーを使用したくありません.SDL 1を使用したいと思います.私を案内できる人に感謝します.

また、おまけの質問ですが、コンパイラは (明らかに) テストを許可しないため、BlitSurface の引数で "nil"、"NULL"、または "C.NULL" (#define する必要があることがわかっています) を使用しますか?

4

3 に答える 3

0

残念ながら、プラケシュの言い回しは少し乱暴でしたが、私はプラケシュに同意しなければなりません。Go はまだ大規模なグラフィックス アプリケーションに対して十分に成熟していません。SDL を使用していることから、あなたはすでに独立したゲーム開発者であり、Go の形で何か新しいことを試みているか、既存の Go プログラマーであり、ゲームを開発するための言語の選択を間違えました (C++ や Haskell を試してみてください。複数の言語を勉強しても害はありません! ;-) )

もちろん、プログラミングとゲーム開発の両方に慣れていない場合は、ゲーム メーカーを試すか、C++ チュートリアルに従うことをお勧めします。

2番目の質問については、Goの「nil」を使用できます。これは、私が知る限り、「\ 0」のASCII文字を表すためです。

于 2013-08-14T18:25:59.000 に答える
0

SDL_LoadBMP は関数ではなくマクロです。その定義は

#define SDL_LoadBMP(file)   SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1)

ただし、Cgo はマクロを使用できないため、次の 2 つのオプションがあります。マクロの拡張バージョンを使用するか、マクロを使用する C 関数を作成し、Go からその関数を呼び出すことをお勧めします。

于 2013-08-14T18:36:49.473 に答える
0

c に戻る前に、go でネイティブ SDL ライブラリを使用してみましたか? また、それがうまくいかない場合は、c で書くか、OpenGL や Ogre3D などの別のタイプのライブラリをグラフィックス作業に使用できます。どちらもしばらく前から go でサポートされています。

編集:あなたが行っているゲーム/グラフィック作業の種類に Go が適切な言語であると確信していますか? Java や C++ のようなものは、業界ではより一般的であり、より優れたサポートを提供しています。ゲームで Go が使用されることはあまりありません。これは、さまざまな API の公式ライブラリが不足しているためです。

于 2013-08-14T18:12:55.823 に答える