77范文网 - 专业文章范例文档资料分享平台

游戏编程文章搜集资料(4)

来源:网络收集 时间:2019-04-13 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

FreeDirectDraw();

FreeDirectInput(); // 释放资源 PostQuitMessage( 0 ); return 0L;

3 在HRESULT ReadImmediateData( HWND hWnd ) 函数中进行了这样的处理,来时时改变小娃娃的坐标。

for( i = 0; i < 256; i++ ) {

if( diks[i] & 0x80 ) {

switch(i) {

case 200: //上键

if( g_me.fPosY > g_me.fVelY) g_me.fPosY -= g_me.fVelY; else

g_me.fPosY = 0; break;

case 208: //下键

if( g_me.fPosY <= WINDOW_HEIGHT - SPRITE_DIAMETER - g_me.fVelY) g_me.fPosY += g_me.fVelY; else

g_me.fPosY = WINDOW_HEIGHT- SPRITE_DIAMETER; break;

case 203://左键

if( g_me.fPosX > g_me.fVelX) g_me.fPosX -= g_me.fVelX; else

g_me.fPosX = 0; break;

case 205://右键

if( g_me.fPosX <= WINDOW_WIDTH - SPRITE_DIAMETER - g_me.fVelX) g_me.fPosX += g_me.fVelX;

else

g_me.fPosX = WINDOW_WIDTH- SPRITE_DIAMETER; break; } } }

这些只是其中一些比较重要的改动,还有许多改动,读者会在实际的程序中看到的。如果你觉得:“啊!到这里就结束了,可是我还是感到似乎莫不到头绪,就

这样草草收尾了?”,其实文章并没有结束,重头戏还在后面呢,那就不是我的工作了,而是看你有没有耐心去仔细阅读代码了,因为想要把握程序的整体,与其让我将代码放在文章中,还不如读者自己在编译器中自己运行实践一下好,其实我们已经在第二个工程代码中有过详细的解释。但记住一定要按照顺序阅读 工程1,工程2 ,工程3。工程1就是 DirectX中提供的原代码,工程2就是我们改了一个背景的工程,而3就是我们讨论的工程。

斜45度角地图拼接

All Rights Reserved to Lacutis, 2004

有人在新浪网的游戏制作论坛问这个,那我随便说说这个问题的解法,先看看地图元素:

可以看出来是个扁的菱形。这个地图元素的大小是64X32,你可以随意决定元素长宽,在设计程序时,地图元素大小并不重要,只要把尺寸扔进绘图方程,程序就能正确地绘制地图。在这个例子中,我们就先用64X32来演示。

那么这个公式是怎么样的呢?先看看Staggered地图:

<-- Staggered

这个地图有5行,看着这个地图你会想,怎么拼图才能将地图拼出来。再画张图来演示:

从这张图可以看出,拼图时从左到右,从上到下,跟正规的矩形拼图一样,唯一同的是,地图元素与元素之间有重叠,看看第一行和第二行之间,第二行的地图元素会压在第一行的元素上,而第三行的的地图元素则压在第二行的元素上。所以,只要找到正确的公式,你就能正确地设计程序,再来一张图:

图上绿点(是高亮度绿色,不是暗绿色)是每块地图元素的起点,第一行的座标是0,第二行的座标是1,第三行的座标是2,......由这些行位座标决定你的地图元素的起点,从这个规律中看出行位座标0,和行位座标2的横向座标X的起点是一样的是0,行位座标1的起点是向右移半块地图元素。

再从纵向座标找规律,看行位座标0和行位座标2,两块地图元素之间的距离刚好是一块地图元素的高。再看看行位座标0和行位座标1,两块地图元素之间的距离刚好是半块地图元素的高。所以,计算每块地图元素的位置,你的公式刚好是:

void CalculateMapTilePos(int n_map_pos_x, int n_map_pos_y, int & n_scrn_pos_x, int & n_scrn_pos_y) { n_scrn_pos_x = n_map_pos_x * iso_tile_size_x + (n_map_pos_y & 1) * (iso_tile_size_x / 2); n_scrn_pos_y = (n_map_pos_y) * iso_tile_size_y / 2; } 在这个公式中,n_map_pos_x是地图纵横的横向座标,n_map_pos_y是地图纵横的纵向座标,n_scrn_pos_x和n_scrn_pos_y是地图元素在屏幕上的纵横座标。

重要:

首先以上的公式只适用于Staggered斜45度角地图,而slide,和Diamond形地图,这个公式要稍加修改才能用。 Slide:

Diamond:

角色移动的步长、步速与滑步现象

滑步只跟步长有关,就是一轮人物行走(或跑步)实际移动的像素。

当然国产游戏大多做的不好。大多数根本不去认真做人物行走的播放程序,简单一帧帧播放动画,并随意移动小人在地图上的位置了事。

防止滑步又可以随意改变人物移动速度的方法是这样的:

将走路的程序用步长和步速两个量来控制。步长必须定死,按做出来的图片中小人一组动画下来,移动的像素为准。

步速是任意的,可以用游戏每帧或每 1/100 秒,人物移动的像素数来表示(可以是小数,比如每帧刷新移动 1.2 个像素)。

简化讲解,我以横版水平移动走路举例:(斜视角可以类推)

假设步长为 step(pixel),步速为 speed(pixel/frame),人物行走动画帧数为 n(frame)。

注: 其中 step 和 speed 可以是小数; n 是整数。 以下运算全部是浮点运算,真实游戏酌情考虑用定点数。

现在要把人物从坐标 0 移动到 100。

我们可以算出,这个过程是需要 100/speed 帧来完成的。

那么第 i 帧画面,人物在的位置:

pos=i*100/speed

这个时候,需要画第几帧图象呢?

首先我们需要知道第 i 帧画面,也就是 pos 这个位置,人物已经走了t=|pos/step| 步 (t 取整了);

我们的小人正在走在第 t+1 步的 m=(pos-t*step) * 100% 时刻m 是一个 0~1 之间的数字。

f=|n*m| 就是我们在此时刻需要画的行走图片帧了。

加快行走速度,无非是加快了频率,不可能导致滑步的,因为一步迈出的距离根本不会变。

ps. 对于跑步、有腾空,轻微滑步是允许的,所以可以适当加大步长是允许的。

by http://www.codingnow.com

Tile Based Engine 中的墙壁自动拼接处理

基于 Tile 的引擎中重复利用率最高的图素,除了地面就是墙壁了, 大家回想一下恺撒III 中的修筑城墙, 或是 Simcity2000 中拉扯电线, 道路,每种物体都只有十几种基本的图素来拼接,而交叉处理都是程序自动选择正确的图素. 假设我们做一个地图编辑器, 这个功能应该也不能少吧:-)

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库游戏编程文章搜集资料(4)在线全文阅读。

游戏编程文章搜集资料(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/585864.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: