导读:
关键字 Pocket PC,GAPI
出处 msdn
Game API 入门
虽然Pocket PC平台上的游戏开发者不能使用DirectDraw,实在的好消息是微软创建了一个新的游戏API来支持Pocket PC,名叫“GAPI”——游戏应用程序编程接口。它不但允许直接访问显示内存,还能访问Pocket PC硬件键。
你需要什么
· GAPI SDK,运行时DLL和一个EVT的查找CD秒数的例子,目录在PocketPCSDK/Program Files/Support/GameAPI。
第一步:创建一个简单的 Hello World 应用程序
GAPI不是一个完整的Pocket PC SDK。所以进行一些准备步骤:
1.手动拷贝GX.H头文件到Pocket PC SDK的Include目录中。
2.拷贝CPU-dependent的GX.LIB到Pocket PC SDK相应的Lib目录中。
3.最后,拷贝CPU-dependent的GX.DLL到你的Pocket PC的Windows目录中。
现在你可以准备建立你第一个简单的Hello World程序了。
1。打开Microsoft eMbedded Visual C++,创建一个新的Pocket PC应用程序项目,命名为“FirstGX”。
当向导完成创建新的应用程序后,让我们添加Game API初始化调用。
2.添加下列的源代码在粗体的初始化函数后面:UpdateWindow(hWnd);
// Try opening the Display for Full screen access if (GXOpenDisplay(hWnd, GX_FULLSCREEN) == 0) { return FALSE; // we won't be able to draw. } // Initialize the Hardware Buttons GXOpenInput(); // Get the Display properties g_gxdp = GXGetDisplayProperties(); // Get information about the Hardware Keys and fills // the g_gxkl structure g_gxkl = GXGetDefaultKeys(GX_NORMALKEYS); return TRUE;
这段代码不得不使用了两个包含在FirstGX.cpp源文件中的全局变量。我们也只好包含GX.H到我们的源文件中避免编译错误。
3.直接添加下列代码在头文件的下面,eMbedded Visual C++向导创建的:
3. #include "gx.h" 4. GXDisplayProperties g_gxdp; // GX struct GXKeyList g_gxkl; // GX struct
作为一个好市民,我们应该在离开程序之前清理好Game API。
4.插入下面两行到WinMain函数的结尾处:
4. GXCloseDisplay(); GXCloseInput();
第二步:直接写显存
在我们开始编码之前,我们必须钻研一些理论。依赖于你的Pocket PC硬件,你可以拥有16位彩色显示(The Casio, HP, or Compaq)或者8位显示(黑白或者彩色, 例如Compaq Aero 1550)。测定你的Pocket PC采用那种显示方式,你可以求g_gxdp结构中cBPP成员的值。它将告诉你正确的位数。
在直接访问16位显存之前,你必须知道16位色彩显示控制器的说明。有两个可能的标志设置:KfDirect555和kfDirect565。555转换到色彩mask对 Red- Green- Blue是X RRRRRGG.GGGBBBBB,在一个短变量中,565转换到 RRRRRGG.GGGXBBBBB。
在8位彩色设备上,你可以使用一个字节来访问256种颜色。
现在我们来准备写屏幕。当一个键按下的时候,我们想让一个颜色填充整个屏幕。
5.添加下列函数到你的FirstGX.cpp源文件的顶部:
bool ClearScreen(int colRed,int colGreen, int colBlue){ // 16 bit per pixel code. Note 2 different pixel formats. switch (g_gxdp.cBPP) { case 16: { unsigned short PixelCol = 0; if (g_gxdp.ffFormat &kfDirect565) { PixelCol = (unsigned short) (((colRed &0xff))>>3)<< 11 | ((colGreen &0xff)>>3) <<6 | ((colBlue &0xff)>>3)); } else if (g_gxdp.ffFormat &kfDirect555) { PixelCol = (unsigned short) ((colRed &0xff)<< 10 | (colGreen &0xff) <<5 | (colBlue &0xff)); } unsigned short * pusLine = (unsigned short *)GXBeginDraw(); if (pusLine == NULL) return false; // NOT OK TO DRAW for (unsigned int y = 0; y g_gxdp.cxWidth; x="0;" int (unsigned for * short unsigned y++)>>1; } pusLine += g_gxdp.cbyPitch >>1; } GXEndDraw(); break; } case 8: { // Get a Random Color // IMPORTANT: // 8Bit are using a palette and the formular // below does not compute a read RGB color unsigned char bPixel = (colRed &0xf)<<5 | (colGreen&0x3)<<3 | (colBlue&0xF); unsigned char * pbLine = (unsigned char *)GXBeginDraw(); if (pbLine == NULL) return false;// NOT OK TO DRAW for (unsigned int y = 0; y 第三步:访问硬件按键
这是最简单的任务了。你应该熟悉Microsoft Windows的WM_ messages并知道如何使用他们。说完这个知识你已经知道如何使用Pocket PC的硬件按键了。正好在你的窗口过程中分析WM_KEYUP 或者WM_KEYDOWN消息。
这里是我们的FirstGX程序中的WM_KEYDOWN分枝:
case WM_KEYDOWN: vkKey = (short)wParam; if (vkKey == g_gxkl.vkUp) { ClearScreen(0,0,0); // Black break; } if (vkKey == g_gxkl.vkDown) { ClearScreen(255,0,0); // Red break; } if (vkKey == g_gxkl.vkLeft) { ClearScreen(0,255,0); // Green break; } if (vkKey == g_gxkl.vkRight) { ClearScreen(0,0,255); // Blue break; } if (vkKey == g_gxkl.vkStart) { SendMessage(hWnd, WM_CLOSE, 0, 0); break; }
GXKeyList结构中所有可能的按键名称列表都包含在gx.h头文件中。
第四步:准备运行!
在我们能编译并下载我们新的FirstGX程序到我们的Pocket PC之前,我们必须添加gx.lib到我们工程的连接库列表中。现在编译并下载你的第一个Game API程序到你的Pocket PC,并操纵按键看会发生什么?
结束:容易地填充!正如你看到的,Game API是非常简单的,但是仍足够强大到可以覆盖所有写快速动作游戏的需要。这个例子拥有Game API表现出的更多在使用GAPI方面的详细资料和窍门。你可以下载这个例子的所有源代码:。
本文转自
http://dev.csdn.net/article/16/16167.shtm
关键字 Pocket PC,GAPI
出处 msdn
Game API 入门
虽然Pocket PC平台上的游戏开发者不能使用DirectDraw,实在的好消息是微软创建了一个新的游戏API来支持Pocket PC,名叫“GAPI”——游戏应用程序编程接口。它不但允许直接访问显示内存,还能访问Pocket PC硬件键。
你需要什么
· GAPI SDK,运行时DLL和一个EVT的查找CD秒数的例子,目录在PocketPCSDK/Program Files/Support/GameAPI。
第一步:创建一个简单的 Hello World 应用程序
GAPI不是一个完整的Pocket PC SDK。所以进行一些准备步骤:
1.手动拷贝GX.H头文件到Pocket PC SDK的Include目录中。
2.拷贝CPU-dependent的GX.LIB到Pocket PC SDK相应的Lib目录中。
3.最后,拷贝CPU-dependent的GX.DLL到你的Pocket PC的Windows目录中。
现在你可以准备建立你第一个简单的Hello World程序了。
1。打开Microsoft eMbedded Visual C++,创建一个新的Pocket PC应用程序项目,命名为“FirstGX”。
当向导完成创建新的应用程序后,让我们添加Game API初始化调用。
2.添加下列的源代码在粗体的初始化函数后面:UpdateWindow(hWnd);
// Try opening the Display for Full screen access if (GXOpenDisplay(hWnd, GX_FULLSCREEN) == 0) { return FALSE; // we won't be able to draw. } // Initialize the Hardware Buttons GXOpenInput(); // Get the Display properties g_gxdp = GXGetDisplayProperties(); // Get information about the Hardware Keys and fills // the g_gxkl structure g_gxkl = GXGetDefaultKeys(GX_NORMALKEYS); return TRUE;
这段代码不得不使用了两个包含在FirstGX.cpp源文件中的全局变量。我们也只好包含GX.H到我们的源文件中避免编译错误。
3.直接添加下列代码在头文件的下面,eMbedded Visual C++向导创建的:
3. #include "gx.h" 4. GXDisplayProperties g_gxdp; // GX struct GXKeyList g_gxkl; // GX struct
作为一个好市民,我们应该在离开程序之前清理好Game API。
4.插入下面两行到WinMain函数的结尾处:
4. GXCloseDisplay(); GXCloseInput();
第二步:直接写显存
在我们开始编码之前,我们必须钻研一些理论。依赖于你的Pocket PC硬件,你可以拥有16位彩色显示(The Casio, HP, or Compaq)或者8位显示(黑白或者彩色, 例如Compaq Aero 1550)。测定你的Pocket PC采用那种显示方式,你可以求g_gxdp结构中cBPP成员的值。它将告诉你正确的位数。
在直接访问16位显存之前,你必须知道16位色彩显示控制器的说明。有两个可能的标志设置:KfDirect555和kfDirect565。555转换到色彩mask对 Red- Green- Blue是X RRRRRGG.GGGBBBBB,在一个短变量中,565转换到 RRRRRGG.GGGXBBBBB。
在8位彩色设备上,你可以使用一个字节来访问256种颜色。
现在我们来准备写屏幕。当一个键按下的时候,我们想让一个颜色填充整个屏幕。
5.添加下列函数到你的FirstGX.cpp源文件的顶部:
bool ClearScreen(int colRed,int colGreen, int colBlue){ // 16 bit per pixel code. Note 2 different pixel formats. switch (g_gxdp.cBPP) { case 16: { unsigned short PixelCol = 0; if (g_gxdp.ffFormat &kfDirect565) { PixelCol = (unsigned short) (((colRed &0xff))>>3)<< 11 | ((colGreen &0xff)>>3) <<6 | ((colBlue &0xff)>>3)); } else if (g_gxdp.ffFormat &kfDirect555) { PixelCol = (unsigned short) ((colRed &0xff)<< 10 | (colGreen &0xff) <<5 | (colBlue &0xff)); } unsigned short * pusLine = (unsigned short *)GXBeginDraw(); if (pusLine == NULL) return false; // NOT OK TO DRAW for (unsigned int y = 0; y g_gxdp.cxWidth; x="0;" int (unsigned for * short unsigned y++)>>1; } pusLine += g_gxdp.cbyPitch >>1; } GXEndDraw(); break; } case 8: { // Get a Random Color // IMPORTANT: // 8Bit are using a palette and the formular // below does not compute a read RGB color unsigned char bPixel = (colRed &0xf)<<5 | (colGreen&0x3)<<3 | (colBlue&0xF); unsigned char * pbLine = (unsigned char *)GXBeginDraw(); if (pbLine == NULL) return false;// NOT OK TO DRAW for (unsigned int y = 0; y 第三步:访问硬件按键
这是最简单的任务了。你应该熟悉Microsoft Windows的WM_ messages并知道如何使用他们。说完这个知识你已经知道如何使用Pocket PC的硬件按键了。正好在你的窗口过程中分析WM_KEYUP 或者WM_KEYDOWN消息。
这里是我们的FirstGX程序中的WM_KEYDOWN分枝:
case WM_KEYDOWN: vkKey = (short)wParam; if (vkKey == g_gxkl.vkUp) { ClearScreen(0,0,0); // Black break; } if (vkKey == g_gxkl.vkDown) { ClearScreen(255,0,0); // Red break; } if (vkKey == g_gxkl.vkLeft) { ClearScreen(0,255,0); // Green break; } if (vkKey == g_gxkl.vkRight) { ClearScreen(0,0,255); // Blue break; } if (vkKey == g_gxkl.vkStart) { SendMessage(hWnd, WM_CLOSE, 0, 0); break; }
GXKeyList结构中所有可能的按键名称列表都包含在gx.h头文件中。
第四步:准备运行!
在我们能编译并下载我们新的FirstGX程序到我们的Pocket PC之前,我们必须添加gx.lib到我们工程的连接库列表中。现在编译并下载你的第一个Game API程序到你的Pocket PC,并操纵按键看会发生什么?
结束:容易地填充!正如你看到的,Game API是非常简单的,但是仍足够强大到可以覆盖所有写快速动作游戏的需要。这个例子拥有Game API表现出的更多在使用GAPI方面的详细资料和窍门。你可以下载这个例子的所有源代码:。
本文转自
http://dev.csdn.net/article/16/16167.shtm