FreeBasic库文件入门 [SJ ZERO原创,沧海冷心翻译]

FreeBasic库文件入门 [SJ ZERO原创,沧海冷心翻译]
http://www.freebasic.cn

FreeBasic最大的优势就是可以与标准C的类库无缝结合。在FREEBASIC拥有内置图形库之前,狂热的FB程序员们都在使用SDL来实现图形和声音开发。在现在这种已经囊括了SDL_NET和WINSOCK库的版本出现之前,包括我在内的不少程序员都在使用各种方法引用头文件来实现网络功能支持。现在我来介绍一下这3个高级库:SDL,FMOD和tinyPTC。了解了他们的原理之后,你会觉得原来使用C的类库是如此简单可靠,在FREEBASIC里使用C的类库将更简单!


一、这些类库到底是什么?

这些类库之所以非常的有用,是因为他们可以给游戏编程提供函数。
SDL这个库含有图形、内置输入支持、网络支持、TRUETYPE字体支持以及声音支持。它也可以和OpenGL一起使用,但是我在这里就不阐述了。

TinyPTC是起初的一个图形库,简单有效。

FMOD是一个3D声音和音乐库。虽然它的授权很古怪,但是它可以播放声音并且封装3D声音。

二、引用这些库

首先我们应该把这些库的头文件引用加在你的工程里。比如添加SDL库:

'$INCLUDE: "SDL/SDL.bi"

FMOD库:

'$Include: 'fmod.bi'

TinyPTC库:

'$INCLUDE: 'tinyptc.bi'


很明显你不能光引用完头文件就完了。初始化SDL并把一幅BMP图读入内存:

CONST SCR_WIDTH = 640
CONST SCR_HEIGHT = 480
DIM MenuScreen AS SDL_Surface ptr '我们的BMP
DIM Shared video AS SDL_Surface ptr '我们的屏幕表面

SDL_Init ( SDL_INIT_VIDEO )
video = SDL_SetVideoMode( SCR_WIDTH, SCR_HEIGHT, 32, 0 ) '图象模式 640x480x32
MenuScreen = SDL_LoadBMP("bitmap.bmp")

初始化FMOD并把一个声音文件读入内存:

DIM sound AS INTEGER '这只是个句柄,所以是INTEGER

IF FSOUND_GetVersion <= FMOD_VERSION THEN
ErrorQuit "FMOD version " + STR$(FMOD_VERSION) + " or greater required"
End If

If FSOUND_Init(44100, 32, 0) = FALSE Then
ErrorQuit "Can't initialize FMOD"
End If

sound = FSOUND_Sample_Load(FSOUND_FREE,"sound.wav", FSOUND_HW3D, 0, 0)


我们没有文件可以让TinyPTC调用因为它太精简太简易了,但是你还是可以初始化它:

const SCR_WIDTH = 320
const SCR_HEIGHT = 200
const SCR_SIZE = SCR_WIDTH*SCR_HEIGHT

if( ptc_open( "tinyPTC test", SCR_WIDTH, SCR_HEIGHT ) = 0 ) then
end -1
end if

三、使用

最重要的一步当然是使用这些家伙来控制屏幕和发声了。这一部分相对简单,可以封装成一个函数来实现功能。用SDL举个例子,比如发送一个IMAGE到屏幕:

SUB BlitImage(x as integer,y as integer,image as sdl_surface ptr, dest as sdl_surface ptr)
DIM Rectangle as SDL_Rect
DIM Rectangle2 as SDL_Rect


Rectangle.X = 0
Rectangle.Y = 0
rectangle.w = image->w
rectangle.h = image->h
Rectangle2.x = x
Rectangle2.y = y

SDL_BlitSurface image, @rectangle, dest, @rectangle2

END SUB


用FMOD播放声音也很简单:

FUNCTION fModPlayWave( samp1 as integer ) AS INTEGER
'where samp1 is the number returned by FSOUND_SampleLoad

DIM position(0 to 2)' as FSound_Vector
DIM vel(0 to 2)' FSound_Vector


fModPlayWave = FSOUND_PlaySoundEx(FSOUND_FREE, samp1, NULL, TRUE)

END FUNCTION


轮到TinyPTC了,它依然是3个类库中最小巧简单的:

SUB putd(BYREF buffer(), BYVAL x AS INTEGER, BYVAL y AS INTEGER, BYVAL colr as INTEGER)
     buffer((y * SCR_WIDTH) + x) = colr
  ptc_update @buffer(0) 'This is a pageFlip
END SUB


四、关闭

虽然你不需要管理内存和那些令人厌烦的任务,但是你必须记住在程序退出前释放类库。幸运的是,刚才的3个程序都只需要一行就能释放:

SDL的释放:

SDL_Quit()

FMOD的释放:

FSOUND_Close()

tinyPTC:

PTC_Close()

这样他们就全部被释放了!
就象你所看到的,在FREEBASIC中使用类库并不象在QB里那么麻烦。事实上,因为程序开发者们不需要去管理内存,开发变的简单多了,哪怕在最流行的操作系统平台和硬件上。

freebasic中文论坛
http://www.freebasic.cn 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值