linux 游戏引擎库,用C++实现跨平台游戏引擎开发

#include "Tunnel.h"

// SDL 相关变量定义

SDL_Surface *screen,*bBuffer,*Image;

SDL_Rect rScreen,rBuffer;

int main (int argc, char **argv)

{

int flag = SDL_SWSURFACE;// 请求一个软件表面.

//软件表面处于系统内存中,

// 一般不如硬件表面速度快

#ifdef WIN32

int fullscreen = MessageBox(NULL, "Show Full Screen (y/n):","Screen Setting", MB_YESNO);

if (fullscreen==IDYES) {

flag |= SDL_FULLSCREEN; // 如果用户需要,接管整个屏幕

}

#endif

Tunnel_Timer(); // 读取起始的系统时钟值

SDL_Init( SDL_INIT_VIDEO ); // 初始化视频子系统

//把屏幕设置到 320x240,32位颜色

screen = SDL_SetVideoMode( 320, 240, 32, flag);

// 如果可用的话,为屏幕表面请求硬件缓冲

bBuffer = SDL_CreateRGBSurface( SDL_HWSURFACE, screen->w,screen->h,screen->format->BitsPerPixel,

screen->format->Rmask,

screen->format->Gmask,

screen->format->Bmask,

screen->format->Amask);

// 这是种子图像,一旦开始它就会盘旋起来

Image = SDL_LoadBMP( "tunnel_map.bmp" );

Image = SDL_ConvertSurface(Image, screen->format, SDL_HWSURFACE);

rBuffer.x = 0;

rBuffer.y = 0;

rBuffer.w = bBuffer->w;

rBuffer.h = bBuffer->h;

// 忽视大多数事件, 包括 鼠标动作, 并取消光标

SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);

SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);

SDL_ShowCursor( SDL_DISABLE );

Tunnel.Set( 320, 240 ); // 通道将填充整个的缓冲区

Tunnel.Precalc( 16 ); //内部的圆圈直径

while (SDL_PollEvent(NULL)==0) {

float fTime = Tunnel_GetTime();

//在修改前,必须锁定表面,特别当缓冲区处于图形硬件内存中时

SDL_LockSurface(bBuffer);

SDL_LockSurface(Image);

Tunnel.Draw(bBuffer, Image, 180*sin(fTime), fTime*100);

SDL_UnlockSurface(bBuffer); // 在更新以后你可以开锁

SDL_UnlockSurface(Image);

// 把缓冲区中的数据输出到屏幕绘图区域并强迫进行重画

SDL_BlitSurface( bBuffer, NULL, screen, &rBuffer );

SDL_UpdateRect( screen, 0, 0, 0, 0 );

}

Tunnel.Free();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值