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' 未声明(在此函数中首次使用),再多的搜索或魔法也无法解决它。如果需要,我在 Ubuntu 上使用 SDL 1.0.2(我认为)

我宁愿不使用包装器,因为 Go 的唯一 SDL 1 包装器已有两年历史,而两个好的包装器用于 SDL 2,我宁愿使用 SDL 1。谢谢任何可以指导我的人。

另外,还有一个额外的问题,因为编译器永远不会让我测试它(显然),我是否在 BlitSurface 的参数中使用“nil”、“NULL”或“C.NULL”(我知道我必须#define)?

4

3 回答 3

0

恐怕我不得不同意 Prakesh 的观点,尽管他的措辞有点粗鲁。对于大型图形应用程序来说,Go 还不够成熟,我假设通过您使用 SDL,您要么已经是一个独立的游戏开发人员,希望以 Go 的形式尝试新的东西,要么是现有的 Go 程序员选择了一个糟糕的语言来开发游戏(尝试 C++ 或 Haskell,学习多种语言没有害处!;-))

当然,您可能对编程和游戏开发都是新手,在这种情况下,我建议您尝试 Game Maker 或遵循 C++ 教程。

至于你的第二个问题,你可以使用 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 将无法使用宏,因此您有两个选择:要么使用宏的扩展版本,要么编写一个使用宏的 C 函数并从 Go 调用该函数。

于 2013-08-14T18:36:49.473 回答
0

在退回到 c 之前,您是否尝试过在 go 中使用本机 SDL 库?此外,如果这不起作用,您可以只用 c 编写或使用其他类型的库(例如 OpenGL 或 Ogre3D)进行图形工作,这两种库在不久前就支持 go。

编辑:你确定围棋是你正在做的游戏/图形工作类型的正确语言吗?像 java 或 c++ 这样的东西在行业中更为常见,并且有更好的支持。Go 不经常用于游戏,这是因为缺乏许多不同 API 的官方库。

于 2013-08-14T18:12:55.823 回答