自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lf426的专栏

再别流年的技术实验室(CSDN)

  • 博客(40)
  • 资源 (2)
  • 收藏
  • 关注

原创 SDL入门教程(十三):3、封装多线程

作者:龙飞        SDL创建多线程的函数SDL_CreateThread()所调用的是函数指针,这意味着我们不可以传入(非静态)成员函数的指针。关于两种函数指针我们之前已经讨论过:函数指针与成员函数指针,我们可以有两种方法能让具有普通函数指针(函数指针以及静态成员函数指针)的函数调用类的私有成员,一是友元函数,另外就是静态成员函数。而能够受到类私有保护的,只有静态成员函数。所以,我们可以通

2008-07-16 01:23:00 2263

原创 SDL入门教程(十三):2、初识多线程

作者:龙飞2.1:竞争条件(Race Conditions)        我们在前面将一个普通函数调用转换成了用线程调用,这意味着我们可以“同时”调用两个以上的线程。例如,我们希望在屏幕的另外一个位置也播放这段简单的动画,我们只需要添加一个线程的调用就可以了。int main(int argc ,char* argv[]){    //Create a SDL screen.    cons

2008-07-16 01:22:00 2276

原创 SDL入门教程(十三):1、多线程,从动画说起

作者:龙飞1.1:简单动画        游戏离不开动画。我们考虑最简单的情况:将一个角色从一个位置移动到另外一个位置。这个行为表述给电脑就是,将一个surface不断的blit(),从起始位置的坐标,移动到结束位置的坐标。移动速度取决于每次blit()的坐标差和blit()的时间间隔(v = ds/dt )。        我们来设计一个函数实现这个简单的动画。我们需要的数据有:起始坐标(int

2008-07-16 01:20:00 2454

原创 SDL入门教程(十二):音乐和音效

作者:龙飞1:扩展库SDL_mixer        根据网上资料的说法,SDL本身的声音体系做得不是很完善,好在还有一个比较完善的扩展库SDL_mixer,这个库支持包括wav, mp3, ogg和midi的声音和音乐,也算是相当完善了。下载地址在:http://www.libsdl.org/projects/SDL_mixer/安装设置参考前面的涉及SDL扩展库安装设置的章节。2:SDL_mi

2008-07-16 01:18:00 3143

原创 SDL入门教程(十一):3、做一个对话框

作者:龙飞        有了按钮类,我们制作对话框就很轻松了。边写程序边说明吧。bool hand_dialog(const ScreenSurface& screen, const std::string& dialog_text, int size){    const int CENTRE_X = (screen.point()->w) / 2;    const int CENTRE

2008-07-16 01:16:00 2363

原创 SDL入门教程(十一):2、设计按钮ButtonClass

作者:龙飞2.1:设计框架与基类的接口        有了更加完善的SurfaceClass的支持,我们可以进行按钮的设计了。接着上一节的话题,按钮除了要给我们表现出来是否被按下的视觉效果,还要起到实际上的作用。一种最简单的思路,既是鼠标在按钮上一旦按下,程序就马上响应。这种思路很朴素,也很实用。大名鼎鼎的QuakeIII的菜单按钮就是这么设计的,这样我们几乎是可以直接使用SDL的事件响应,即:事

2008-07-16 01:13:00 2631

原创 SDL入门教程(十一):1、SurfaceClass类的再设计

 作者:龙飞1.1:为了按钮做准备        按钮是鼠标事件响应的象征,在PC游戏中起着十分重要的作用。这一章节,我们开始通过SDL提供的底层函数,自己来设计按钮。        按钮一般有这么几种状态:out: 鼠标不在按钮上;over: 鼠标在按钮上;down: 鼠标按下了;up: 鼠标松开了;        其中,down和up又可以细分为鼠标是在按钮上按下松开的,还是在按钮外按下松开的

2008-07-16 01:12:00 1699

原创 SDL入门教程(十):5、SDL完美显示中文

 作者:龙飞注意:请使用支持中文的TTF字库。5.1:构建可以正确显示中文的SDL_ttf函数        世界终于又充满了光明!任何事情都是有答案的,不知道仅仅是因为我们还没有找到。解决了以上一系列问题,我们终于可以不依赖MFC,完全使用自由开源的资源,让SDL显示中文了!我们通过TTF_RenderUNICODE_Xxx()来构建这些函数://FileName: font.h#ifnde

2008-04-02 00:38:00 4866 6

原创 SDL入门教程(十):4、用iconv获得正确的Unicode,使用FriBiDi实现UTF-8到Unicode的正确转换

作者:龙飞4.1:为什么iconv不能完全正确的转换Unicode?        我不是先知,教程里面是整理过的思路和逻辑顺序,在我研究这个问题的时候,头绪远远比教程里面乱得多。我完全是从Wesnoth的源代码去分析问题的,所以,为什么会扯上UTF-8和FriBidi,那也是因为在源代码中找到了线索。        iconv不能完全正确的获得Unicode,也就是我们刚才遇到的纯汉字转换没问题

2008-04-02 00:37:00 3183

原创 SDL入门教程(十):3、字符集之间的转换,win32下的libiconv

作者:龙飞3.1:GNU的libiconv项目http://www.gnu.org/software/libiconv/        再一次的,感谢伟大的GNU。我们需要的是Unicode码,在程序中转换,我们需要相应的库。libiconv支持许多字符集,包括我们将用到的GB2312,UTF-8和UCS-2(Unicode)。具体的,在项目主页上有详细的说明。我们需要新学习直接用的类容并不繁多,

2008-04-02 00:36:00 2548 3

原创 SDL入门教程(十):2、直接通过Unicode让SDL显示中文

作者:龙飞2.1:SDL本身可以显示中文吗?        SDL的扩展库SDL_ttf本身具备显示中文的功能吗?网上很多观点,说不能显示的,甚至做了分析解释了原因。但是,事实是,SDL本身就可以显示中文。如果我们看看SDL_ttf.c的源代码,我们可以看到,最终用于构建SDL_Surface平面的函数,在三种显示模式(Solid, Shaded, Blended)下,都是其对应的TTF_Rend

2008-04-02 00:35:00 3533 1

原创 SDL入门教程(十):1、多语言支持,Win32下的GetText

作者:龙飞        自从开始研究SDL的文本显示,我就一直在思考在SDL中显示中文的问题。我们知道韦诺之战(Battle for Wesnoth)使用SDL开发的,并且支持多语言。所以,我一直相信Wesnoth的源代码里面一定有我所需要的答案。网络上是纵说纷纭啊,有些人干脆说,SDL不支持中文;有些人在困难面前回到了MFC的怀抱。而,既然我的目标是跨平台,并且我也相信一定能找到答案,所以,我

2008-04-02 00:33:00 2082

原创 SDL入门教程(九):5、文本反馈鼠标位置坐标信息

作者:龙飞注意事项:1、times.ttf文件请到C:/WINDOWS/Fonts下寻找并拷贝到资源目录下。2、如果您使用VC2008,请用Release编译。原因是,似乎涉及到vector的操作,Runtime Library在debug的时候必须用Multi-theaded Debug DLL (MDd),而Release时候才用Multi-theaded DLL (MD)。而我们亲爱的SDL

2008-04-02 00:32:00 1547

原创 SDL入门教程(九):4、int转换为std::string

作者:龙飞        我下面考虑的问题,是用TextSurface反馈鼠标事件的信息。我想到的第一个例子,很自然就是反馈鼠标所在坐标的位置。这里涉及到一个基础的问题,即鼠标位置显然不是用字符串表示的。SDL给我们的反馈信息是int,我们需要用TextSurface将int构建成可以被blit到ScreenSurface上的面,需要做的第一件事情,是将int转换为string。        我

2008-04-02 00:31:00 1840

原创 SDL入门教程(九):3、文本反馈“按键”信息

 作者:龙飞3.1:一些小的修改        我觉得写C++的程序,一是看起来确实比较C++一点,二是相对于C的“精炼”,C++要的是“健壮”。所以,其实我不太满意用C风格字符串作为ScreenSurface的成员数据,所以做了修改。这也是为了在程序中构建ScreenSurface对象的时候可以使用string。class ScreenSurface{private:    //    st

2008-04-02 00:30:00 1541

原创 SDL入门教程(九):2、显示文本的完整代码

注意:ttf字库文件,可以在C:/WINDOWS/Fonts下寻找,比如例子中用到的times.ttf;lazy.ttf请到Lazy Foo的相关教程True Type Fonts后面的示例中获得。//UVi Soft (2008)//Long Fei (lf426), E-mail: zbln426@163.com//FileName: SurfaceClass.h#ifndef SURFA

2008-03-25 01:09:00 1976

原创 SDL入门教程(九):1、在SDL图形窗口显示文本

作者:龙飞        最近几篇教程基本上都是参考着Lazy Foo的教程顺序来的。因为我也觉得他的顺序很实用。所不同的是,新的类型我都添加在了之前建立起来的surface类的基础之上。所以,如果你觉得单独看这些教程完全搞不明白,最好从头按照顺序来学习。另外,为了复习C++知识,也为了遵循C++的理念,我有意的将程序风格向C++靠拢。如果你更喜欢C风格,相信你在其他地方可以找到更适合你的教程。1

2008-03-25 01:08:00 3022

原创 SDL入门教程(八):2、裁剪精灵图片的完整源代码

 //UVi Soft (2008)//Long Fei (lf426), E-mail: zbln426@163.com//FileName: SurfaceClass.h#ifndef SURFACE_CLASS_H#define SURFACE_CLASS_H#include iostream>#include string>#include "SDL/SDL.h"#include "S

2008-03-25 01:06:00 2386

原创 SDL入门教程(八):1、裁剪精灵图片(Clip Blitting and Sprite Sheets)

作者:龙飞        这两天下雨,所以就暂停了寻春的步伐,多写了点教程。绵阳的春天是美丽的,大家学习和写程序之余,还是应该多看看大自然。给大家推荐我拍的风景照啦,呵呵。http://picasaweb.google.com/firefly.cao        因为不想多上传图片,所以我的例子中的图片文件直接就用Lazy Foos教程中的附件了。相关资源,大家可以在这里下载:Clip Bli

2008-03-25 01:05:00 2206

原创 SDL入门教程(七):SDL抠色(Color Keying)

作者:龙飞1:什么是抠色(Color Keying)        我们总是blit矩形区域的图片,但是很显然,几乎没有一个游戏的角色图片是矩形的。美工把图片画到一个矩形范围内,如果设定了特定的背景颜色,我们就可以把矩形图片上的角色“抠”下来,相对于背景来说,我们就是把不属于角色的背景颜色扣掉,故称抠色。        我们看看SDL抠色函数的原形:int SDL_SetColorKey(SD

2008-03-25 01:03:00 3039

原创 SDL入门教程(六):SDL读取其它格式的图片

作者:龙飞1:扩充库(Extension Libraries)        SDL本身所支持的,仅仅是读取bmp格式的图片。要使用其它格式的图片,我们需要使用SDL的扩充库。在下面地址,我们可以下载到相关文件SDL_image-devel-1.2.6-VC8.zip。http://www.libsdl.org/projects/SDL_image/        与SDL本身的设置一样,将inc

2008-03-25 01:02:00 2535

原创 SDL入门教程(五):7、鼠标事件演示,代码重用

作者:龙飞7.1:演示程序源代码        今天因为一个网上的朋友的请求,做个一个关于鼠标事件的演示程序。实际上,可以完全用到前面我们构造的类和类方法,这里送上主程序,供大家参考。其他两个文件和图片文件均不需要任何改变。#include "SurfaceClass.h"int game(int argc, char* argv[]);int main(int argc ,char* arg

2008-03-03 01:36:00 2362

原创 SDL入门教程(五):6、对C++异常机制的思考,代码重写

作者:龙飞6.1:用bool作为命令是不是画蛇添足了?        不知道为什么,我总觉得总是用if结构来调用命令让人读起程序来很不连贯。所以,我决定重新修改下,并且异常抛出改为使用类对象,这样是不是更C++一点呢?:)6.2:修改后的代码。//FileName: SurfaceClass.h#ifndef SURFACE_CLASS_H#define SURFACE_CLASS_H#inc

2008-02-22 18:26:00 1645

原创 SDL入门教程(五):5、本章范例的完整源代码

作者:龙飞5.1:准备工作。一张640*480大小的bmp文件作为背景,命名为:bg.bmp;一张128*128大小的bmp文件作为要在背景上移动的图片,命名为:image.bmp。5.2:头文件SurfaceClass.h//FileName: SurfaceClass.h#ifndef SURFACE_CLASS_H#define SURFACE_CLASS_H#include iostr

2008-02-22 02:57:00 1951 1

原创 SDL入门教程(五):4、让图片动起来!

作者:龙飞4.1:再讨论简单的SDL event响应。Uint8 *SDL_GetKeyState(int *numkeys);        要让图片动起来,最好是我们可以“操作”的动。按照一般思路,键盘的“上”“下”“左”“右”是不错的选择。在FPS游戏和模拟器中,我们可能更习惯wsad四个键,所以,让他们同时起作用吧。这个函数的一般用法,是把参数设置为空指针。我们还是先忽略细节。因为

2008-02-22 02:55:00 2684 3

原创 SDL入门教程(五):3、对SDL_BlitSurface()的进一步讨论

作者:龙飞3.1:矩形区域SDL_Rect。typedef struct{  Sint16 x, y;  Uint16 w, h;} SDL_Rect;        因为显示器通常是矩形的,所以,矩形是计算机图形学中最基本的操作区域单元。这个结构很简单,x和y是矩形的左上角坐标。x从左到右增加;y从上到下增加。左上角的坐标就是(0,0)——SDL中就是这样的。w是矩形的宽,h是矩形的

2008-02-22 02:53:00 3617 2

原创 SDL入门教程(五):2、构建SDL surface类

 作者:龙飞2.1:构建普通的surface类。        在所有的surface里面,只有screen surface是最特殊的。因为第一,screen surface只有一个;第二,其他所有的普通surface都必须被blit到screen surface上,通过flip screen surface才能显示出来。所以,我们可以认为普通的surface是“依赖”于一个screen surf

2008-02-22 02:51:00 2855 2

原创 SDL入门教程(五):1、构建SDL screen surface类

作者:龙飞今天是元宵节,新年过去,又要开始抓紧时间奋斗了。祝大家都能继续追逐自己的梦想。BS的书上引过一句话,“一个人要是不耕作,就必须写作”,所以,不耕作的我不能停止写作,time is money, my friend!1.1:整理两种SDL_Surface的关系。        前面一直在用面向过程的思想写程序,因为OOP细分到每一个具体的方法,还是过程。OOP的难点其实在于理清楚不同类之间

2008-02-22 02:49:00 2311 1

原创 SDL入门教程(四):3、SDL的软、硬件渲染的深入试验和分析

作者:龙飞3.1:试验——硬件渲染下关闭双缓存。现象:front图片出现不断被“撕裂”的效果。        双缓存的概念,是在计算机速度还不足以满足“即时作图”的情况下的一种技术。即,在屏幕(即前台的帧缓存framebuffer)上显示一帧图片的同时,在后台一个帧缓存的映射中作图。这样,只有当屏幕画面需要改变的时候,后台的缓存才交换到前台来,这样就避免了在前台出现计算机“作图”的过程。     

2008-02-15 18:06:00 3391

原创 SDL入门教程(四):2、SDL动画的硬件渲染(Hardware Render)

作者:龙飞2.1:需要修改的地方。        这里,我们真正的开始使用SDL的硬件渲染。首先,我们需要设置驱动的环境(以windows为例,我们设置为directx,Linux的设置请参考官方网站,我们这里预留为dga)。另外,如果要启动硬件加速,必须使用全屏模式(SDL_FULLSCREEN),所以,在前面的软件渲染中,我们也使用全屏以作对比。第三,硬件渲染需要打开双缓冲(SDL_DOUBL

2008-02-15 18:04:00 2880

原创 SDL入门教程(四):1、SDL动画的软件渲染(Software Render)

作者:龙飞1.1:准备工作。        准备一张640*480的bmp位图(back.bmp)作为背景,另外一张小一点的(比如100*100的front.bmp)作为前景。        渲染(render)是CG术语,是将以数据结构储存在计算机中的图片以人眼可观察的图片实现出来的过程。前面例子中显示一张bmp图片实际上也是渲染。对于那张bmp图片,我们经历了3过过程的处理:1、将bmp图

2008-02-15 18:00:00 2932 1

原创 SDL入门教程(三):3、视频属性信息(VideoInfo)

作者:龙飞3.1:获取视频属性信息。const SDL_VideoInfo *SDL_GetVideoInfo(void);        我们在前一小节中,为了尽快实现一个SDL的运行窗口,跳过了很多细节,也留下了很多问题。其中一个很重要的问题就是:我们到底有没有使用到显卡的硬件加速?因为硬件的差异性,直接使用硬件接口的时候,会出现很多新的问题。这些问题在第(四)章中,我将以自己的操作系

2008-02-10 03:35:00 6138

原创 SDL入门教程(三):2、显示一张BMP位图。

 作者:龙飞2.1:准备工作。        找一张*.bmp格式的图片。我在例子中将使用640*480大小的图片。如果你在windows下面,你可以打开画图程序自己简单的画一张,或者将其他格式的图片另存为bmp。然后将图片名字修改为helloworld.bmp(当然,你也可以在程序的相应部分修改为你目标图片的名字。),这是我们将要显示的图片。2.2:创建一个SDL的执行窗口。        我们

2008-02-08 01:49:00 4454

原创 SDL入门教程(三):1、如何实现按下ESC退出程序?

作者:龙飞1.1:游戏中的退出习惯。        如同我们经常遇到的游戏,一般想退出的时候,我们会习惯性的按下ESC——即使游戏不会马上退出,也一般会调出一个带有退出选择的菜单。我们希望修房子的时候,最好先计划在哪里修门,所以,我认为应该优先掌握“退出游戏”的方法。简单的说,我们启动了一个SDL程序,我们希望按下ESC就能退出,怎么实现?1.2:事件(event)查询初探。        在计算

2008-02-08 01:47:00 3400

原创 SDL入门教程(二):3、中途装载与退出,SDL错误信息

作者:龙飞3.1:SDL flags 的中途装载和中途退出。        如果我们在程序一开始只启动了video,在运行的某个期间需要启动audio,之后,又需要关掉video只保持audio听声音应该怎么做呢?        先说中途装载。我们首先想到的,还是通过SDL_Init();来装载audio。这看似合理的,而且通过本人试验,发现事实上也是可行的。但是,我们前面分析过一个逻辑,就是一个

2008-02-08 01:44:00 2737

原创 SDL入门教程(二):2、SDL的安全装载与安全退出

作者:龙飞2.1:WasInit可以在Init前使用吗?        我们在介绍SDL_Init()的时候说过,这个函数是调用SDL其他函数之前必须首先调用的函数。但是有一个问题是,我们如何知道SDL_Init是否已经被调用过了呢?于是我们接着认识了SDL_WasInit(),这个函数可以返回Init的状态。如果WasInit用在了Init之前会出现什么问题,或者说,WasInit可以在Init

2008-02-08 01:42:00 3577

原创 SDL入门教程(二):1、SDL的装载,位标(flags)

 作者:龙飞1.1:SDL_Init!        我们回顾一下前面的那个小程序,所使用到的第一个SDL函数是:SDL_Init(SDL_INIT_EVERYTHING);        这是SDL的装载函数,也就是说,SDL的其他函数必须在这个函数将SDL装载之后才能够正常调用。我们看一下函数原形:int SDL_Init(Uint32 flags);        它的返回值是int

2008-02-08 01:40:00 4610 1

原创 SDL入门教程(一):3、MinGW 下的安装与设置

作者:龙飞3.1:MinGW 是什么?        MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了L

2008-02-08 01:37:00 4656

原创 SDL入门教程(一):2、Visual C++ 下的安装与设置

作者:龙飞2.1:获得Visual C++ 2008 Express Edition。        使用盗版不是一个好习惯。与其背上贼名,我更愿意放弃华丽的外表,使用朴实无华的免费软件。你可能知道Linux和GNU,但是也许你还不知道$M也提供一些“免费的午餐”。Visual Studio 的Edition版本就是这样的一种便当。作为商业公司的一种商业手段,免费的VC也具有一些吸引人的地方,比如

2008-02-08 01:33:00 9968 9

原创 SDL入门教程(一):1、一切从零开始

作者:龙飞  1.1:SDL是什么?         SDL是Simple DirectMedia Layer(简易直控媒体层)的缩写。它是一个跨平台的多媒体库,以用于直接控制底层的多媒体硬件的接口。这些多媒体功能包括了音频、键盘和鼠标(事件)、游戏摇杆等。当然,最为重要的是提供了2D图形帧缓冲(framebuffer)的接口,以及为OpenGL与各种操作系统之间提供了统一的标准接口以

2008-02-08 01:27:00 9419 1

彻底解密C++宽字符

详细讨论C/C++宽窄字符转换和国际化策略问题。

2010-06-27

游戏入门教程(C++&SDL)

Lazy Foo' 的SDL游戏入门教程(全),pdf打包,完整源代码。

2008-02-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除