SDL游戏编程2

软件和网站开发以及相关技术探讨
回复
rayfox
帖子: 39
注册时间: 2007-02-03 9:12

SDL游戏编程2

#1

帖子 rayfox » 2007-05-26 0:09

用SDL显示一个图片(图片是MM哦)

代码: 全选

#include <SDL.h>
#include <stdio.h>
	
//显示一张妹妹的图片,嘻嘻,但愿不要打哦^.^

int main(int argc, char ** argv)
{
	SDL_Surface * screen; //主表面
	SDL_Surface * image; //用来放MM-----的图片信息(像素)
	SDL_Event     event;
	
	bool bAppRun = true;
	//初始化SDL
	if (SDL_Init(SDL_INIT_VIDEO) == -1) {
		fprintf(stderr, "SDL_Init %s\n", SDL_GetError());
		return -1;
	}
	
	//初始化成功设置退出要调用的函数SDL_Quit
	atexit(SDL_Quit);
	
	//创建一个640X480 16-bit 模式的主表面 16位可以让MM的效果好看一点
	screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
	if (screen == NULL) {
		fprintf(stderr, "Couldn't set 640x480x8 video mode %s\n",
			SDL_GetError());
		return -1;
	}
	
	//读取MM图片信息,并创建一个表面,并把数据填入该表面中。
	image = SDL_LoadBMP("./mm.bmp"); //请在终端里运行该程序
	if (image == NULL) {
		fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。
		return -1;
	}
	
	//有了MM的表面了,就可以显示了。
	//将MM的表面画在我们的主表面上
	if (SDL_BlitSurface(image, NULL, screen, NULL) < 0) {
		//解释一下NULL,第一个是按照image的尺寸显示,第二个是默认显示。你也可以指定大小,不过要用到SDL_Rect你可以看一看帮助。 
		fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧
		return -1;
	}
	
	//好了更新显示画出MM
	SDL_UpdateRect(screen, 0, 0, image->w, image->h);
	
	while (bAppRun) {
		//消息循环
		if (SDL_PollEvent(&event)) {
			switch (event.type) {
				case SDL_KEYDOWN:
					//按下任意键退出
					bAppRun = false;
				break;
			}
		}
		//没事就画MM玩
		SDL_UpdateRect(screen, 0, 0, image->w, image->h);
	}
	
	//退出了程序释放MM表面的资源
	SDL_FreeSurface(image);
	
	return 0;
}
makefile内容

代码: 全选

t2: main.o
	g++ -o t2 main.o `sdl-config --libs`

main.o: main.cpp
	g++ -c main.cpp `sdl-config --cflags`
附件
t2.tar.gz
(114.34 KiB) 已下载 210 次
dinghwy
帖子: 44
注册时间: 2006-07-10 17:40

#2

帖子 dinghwy » 2007-06-05 14:18

必须得顶了 我现在也学这个库呢。多交流阿
我的信箱地址是 dinghui1314@gmail.com
星空愷
帖子: 1
注册时间: 2012-04-07 22:13

Re: SDL游戏编程2

#3

帖子 星空愷 » 2012-05-08 17:10

写的很详细,我们开始课程设计。。。。一个星期完成,谢谢你写的教程
fy0
帖子: 190
注册时间: 2011-06-27 0:57

Re: SDL游戏编程2

#4

帖子 fy0 » 2012-05-08 18:13

这都是坟了啊……
回复