游戏

游戏设计,编程

导航

<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

文章分类

档案

随笔分类

登录

统计

2004年10月24日 #

读《Visual Basic 游戏编程21天自学通》(1)

作者:Clayton Walnum

有很多类型的游戏适合用VB来编程。一切对VB怀有疑惑的程序员将从本书知道VB的魅力。

本书适合有一定VB基础的程序员。所以,当你阅读本书之前,稍稍阅读一本也许在图书馆借来的书,并用 Visual Basic IDE 编译和改造一些实例。

第一天:了解游戏编程的一些要素。

为什么要用VB来做游戏开发工作:

  • VB 是最容易学的语言之一。
  • 是开发工具。能迅速创建用户界面。
  • 功能强大。能处理所有复杂的应用程序。
  • 有专业水准的绘图功能。
  • 轻松管理位图图片
  • BASIC语言扩展借口能自定义数据类型和类
  • 能调用 Windows API。
  • 最后一条理由,你可能会喜欢它。

适合用VB开发的游戏类型:VB能做所有需要的事情的游戏。调用Windows API 的游戏。

游戏编程要素:

  • 游戏设计:决定游戏好坏的因素。设计一个令玩家喜欢的游戏非常重要。
  • 图形设计:游戏包含了大量图形。动人的插图和迷人的场景将能吸引玩家。
  • 声音制作:任何时候都需要声音,游戏的虚拟世界也需要。
  • 控制和界面:直接和玩家互动。
  • 图象处理:处理大量的游戏中的图像。需要很多技巧和技术。
  • 动画:用某种方式进行移动或改变游戏图像对象的过程。
  • 算法:解决游戏中的计算问题。
  • 人工智能:一种让电脑显得“聪明”的算法。
  • 游戏测试:玩,找出Bug。

14:00 | 评论 (6)

读《Windows 游戏编程大师技巧》[续1]

上回已经讲了游戏编程需要一定的Windows编程基础,并且建议大家稍微了解并使用Windows编程。

一个空白的Game 控制台程序,需要的可发送Email给我 wyhw2002 AT hotmail.com 或者 wyhw2004 AT yahoo.com
此Game 程序主要有以下方法构成,你只需要把你的3D代码加入到下面的程序就能获得百元美元(哈哈,书上的原话)
int Game_Init(void *parms = NULL, int num_parms = 0) 初始化
int Game_Main(void *parms = NULL, int num_parms = 0) 主程序
int Game_Shutdown(void *parms = NULL, int num_parms = 0)  关闭

这回我们来继续 DirectX 编程。

DirectX编程第一次接触:DirectDraw 编程

DirectDraw 接口

IUnknow,所有COM接口
IDirectDraw,支持硬件,视频卡。必须创建的主COM对象
IDirectDrawSurface,创建实际显示画面,主画面
IDirectDrawPalette,处理更多色彩,调色板
IDirectDrawClipper DirectDraw 光栅和位图操作

DirectDraw 编程步骤:

一、创建 DirectDraw 对象
1) DirectDrawCreate() 函数:
HRESULT WINAPI DirectDrawCreate(GUID FAR * lpGUID,// 对象的 guid
                                                             LPDIRECTDRAW FAR *lplpDD,  //获得对象接口
                                                             Iunknown FAR *pUnkOuter);//高级特性,通常为NULL
2)、错误处理:1、FAILED() 对错误进行测试。 2、SUCCEEDED() 对成功进行测试。3、测试DirectDrawCreate返回的代码。
3)、接口的升级(随着COM升级):QueryInterface()

二、和Windows 协同工作,创建控制级别:
IDirectDraw4::SetCooperativeLevel()函数:
HRESULT SetCooperativeLevel(HWND  hWnd, // Windows 句柄
                                                    DWORD  dwFlage); //控制标志,控制级别定义。

三、设置视频模式。 SetDisplayMode
HRESULT SetDisplayMode( DWORD dwWidth, DWORD dwHeight, //新模式的宽度和高度
DWORD dwBPP, //新模式的每个像素所占字节数(bpp)
DWORD dwRefreshRate, //新模式的刷新率,参数0表示缺省值。
DWORD dwFlags );  //辅助项,一般设置为0,设置Mode 13时有变化(见DirectX SDK)。
成功:DD_OK.
使用方法:
Hr =lpDD->SetDisplayMode(640, 480, 8, 0, 0);
if (Hr != DD_OK)
{ SetDisplayMode FAILED}

四、创建调色板。
1、创建一个调色板数据结构 tagPALETTEENTRY
typedef struct tagPALETTEENTRY { // pe
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
BYTE peFlags; //应被置为PC_RESERVED 。
} PALETTEENTRY;//peRed、peGreen、peBlue分别表示逻辑调色板项的R、G、B颜色分量值。
2、创建调色板  CreatePalette()
HRESULT CreatePalette(
DWORD dwFlags,
LPPALETTEENTRY lpColorTable, //2、4、16或256个PALETTEENTRY结构序列的地址,用来初始化这个DirectDrawPalette对象。
LPDIRECTDRAWPALETTE FAR *lplpDDPalette,   //如果函数调用成功,这个参数将接收到指向新创建的DirectDrawPalette对象的指针的地址。
IUnknown FAR *pUnkOuter   //该参数将允许与今后的COM集合特性相兼容。目前,只要这个参数不是NULL,   IDirectDrawX::CreateSurface返回一个错误。
);
参数:
dwFlags   下列标志的单个或组合:
    DDPCAPS_1BIT        指定调色板索引为1比特。色彩表中只有两个入口。 
    DDPCAPS_2BIT      指定调色板索引为2比特。色彩表中有四个入口。 
    DDPCAPS_4BIT      指定调色板索引为4比特。色彩表中有16个入口。
   DDPCAPS_8BIT       指定调色板索引为8比特。色彩表中有256个入口。     DDPCAPS_8BITENTRIES       表明调色板的索引值是另外一个8位调色板的索引。这个标志只有和DDPCAPS_1BIT、DDPCAPS_2BIT、或DDPCAPS_4BIT标志一起使用才能生效,并且目标页面必须是8 bbp(8位色彩模式)。每一个色彩入口为1字节,并且指向目标页面的8 bbp调色板。    DDPCAPS_ALLOW256      表明用户可以定义调色板的所有256个入口。
返回值:如果函数调用成功,返回DD_OK。
如果函数调用失败,返回值可能是下列错误值之一:
DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS
DDERR_NOCOOPERATIVELEVELSET
DDERR_OUTOFMEMORY
DDERR_UNSUPPORTED

五、创建一个显示画面
1、填写DDSURFACEDESC2 数据结构,描述要创建的画面

typedef struct _DDSURFACEDESC2 {
    DWORD         dwSize;  //结构长度
    DWORD         dwFlags;  //结构标志
    DWORD         dwHeight;  //像素中的画面高度
    DWORD         dwWidth;  //像素中的画面宽度
    union
    {
        LONG      lPitch;  //演示模式的水平内存间距
        DWORD     dwLinearSize;
    } DUMMYUNIONNAMEN(1);
    DWORD         dwBackBufferCount;  //设定或读取后部缓冲器的数目
    union
    {
        DWORD     dwMipMapCount;
        DWORD     dwRefreshRate;
    } DUMMYUNIONNAMEN(2);
    DWORD         dwAlphaBitDepth;
    DWORD         dwReserved;
    LPVOID        lpSurface; //获取画面所在的内存指针
    union
    {
        DDCOLORKEY    ddckCKDestOverlay;
        DWORD         dwEmptyFaceColor;
    } DUMMYUNIONNAMEN(3);
    DDCOLORKEY    ddckCKDestBlt;  //控制目标颜色关键字
    DDCOLORKEY    ddckCKSrcOverlay;  //控制源颜色关键字
    DDCOLORKEY    ddckCKSrcBlt;
    DDPIXELFORMAT ddpfPixelFormat;  //重设画面的像素格式,请参考 DirectX SDK
    DDSCAPS2      ddsCaps;  //其他需要定义的画面的特性
    DWORD         dwTextureStage;
} DDSURFACEDESC2, FAR* LPDDSURFACEDESC2; 
3、选用调色板。SetPalette()
HRESULT SetPalette(
  LPDIRECTDRAWPALETTE lpDDPalette  
);
 
六、清除:清除创建的DirectDraw COM对象,别忘了:)
 
这回到此为止。下回将继续 高级DirectDraw等。谢谢观看。

11:46 | 评论 (1)


吹响爱心集结号,传递爱心手拉手


请不要发表可能给我们带来伤害的政治言论,谢谢配合