- 博客(9)
- 资源 (20)
- 收藏
- 关注
原创 从零开始重写KOK1(万王之王1) —— (3)优化玩家移动与精确8方向朝向
0. 回顾与分析在第1篇文章中,我们是对移动目标与玩家坐标做差,然后按照各个方向的可能性进行if判断,来决定人物的方向,在第一篇的DEMO中,可以发现,只有当人物正好在正斜方(45度的4个斜方向,或者说是n*pi/4时),人物才会斜着站,否则都是上下左右4个方向的朝向。对人物的移动方面,我们是x没达到目标则加上RunSpeed,y也如此。这样的结果是,人物斜着走将会非常快。所以我们优化代码以达到两个目的:(1)人物的朝向是将一个圆分成16份,每个方向占两份,使人物朝向正确的角度。(2)人物的RunSpeed
2011-01-20 18:56:00 22548 20
原创 从零开始重写KOK1(万王之王1) —— (2)优化地图加载
本来想在第2篇说明物体遮挡与寻路的开发过程,但是因为我把这问题想简单了,现在已经完成了遮挡与寻路,但是中间的过程非常多,第一篇文章的系统结构需要做一些修改才可以,这里先说一下地图加载的相关问题。首先是效果图:可直接运行版本下载:>>点击进入下载页在第一篇文章《从零开始重写KOK1(万王之王1) —— (1)让人物可在地图上使用鼠标跑动》中,地图是这样的过程加载的:1. 在Map对象初始化时将每个小图个加载到一个整体的大地图中,如图:2. 在玩家位置作出修改后,也修改屏幕矩形左上角的位置,因为玩家是在中间,所
2011-01-20 14:48:00 7570 7
转载 Diablo世界观与剧情综合说明
研究了几天Diablo2的技术,今天突然对剧情产生了浓厚的兴趣,虽然从1代,到地狱火,到2代,再到破坏之王一路玩下来,但一直没有太明白剧情,今天各处搜索学习,终于稍稍有所了解,所有的文章内容均为转贴,我将他们按顺序编排了一下,我找到的文章中已经不知道作者是谁了~1. 在Diablo1开始前的故事 天堂与地狱的战斗(末日之战)在人类出现之前就已经开始,延续了数千年,其时天使和恶魔中都英雄辈出,可创造者BLIZZARD小组设定的平衡度太高,这两帮人谁也奈何不了谁,于是死伤无数。其中Diablo(迪亚波罗)
2011-01-12 00:30:00 7324 2
原创 从零开始重写KOK1(万王之王1) —— (1)让人物可在地图上使用鼠标跑动
从飞信裸辞已经2个月了,因为对游戏的爱,和做出好玩的游戏这个梦想。《Windows游戏编程大师技巧》(以下简称《大师》)这书已经读完,DEMO也都搞清楚了,为了确实的掌握2D游戏的技术,决定完成一个完整的KOK1咒术师打钱坑的DEMO,也是作为我踏入游戏开发行业的简历附加DEMO。【广告】对游戏有爱的游戏公司(北京)缺人(2D/3D游戏程序员)的话请随时把我拉走。这个系列文章将记载在这个DEMO开发过程中的一点一滴,废话不说了,进入正题。0. 本期功能(1)人物可以在地图上通过鼠标右键控制走动(2)地图可以
2011-01-11 11:49:00 8332 9
原创 使用dinput鼠标的相对模式达到绝对定位
0. 当打算写KOK1的DEMO的鼠标管理模块时,是这么想的,获取到鼠标在视窗中的绝对位置(相对于窗口0,0点的坐标),然后来推算这个位置在地图上的坐标,然后让玩家走过去。存在如下几种方案: 使用Windows的系统鼠标指针,GetWindowPos来获得指针的位置,以及一些Win32API来获取指针的状态。这种问题就是在游戏中,基本上都不会去使用鼠标的指针样子,甚至静态图片也不行,通常都是动画,通过反复的修改窗口鼠标的样子的方式来实现动画性能太差。 微软提供了DirectInput,作为专门在游戏中使用的
2011-01-10 22:08:00 6450
原创 当你的程序在朋友的机器上显示丢失msvcr100d.dll的时候
0. 给朋友发了个DEMO,收到提示:丢失 msvcr100d.dll1. 一看是运行库文件,赶紧让朋友下载并安装vc++ 2010 redistribution,朋友反馈还是提示丢失这个dll文件2. 把我本地的这个dll拷贝到他机器里,提示成功3. 太奇怪了啊,这玩意就是vc++运行库文件啊,为啥装了redistribution还不成呢4. 我注意到了这个文件名的100后面带着一个d字,让我想起了debug~5. 在VC里面找设置,终于发现了:Property->C/C++->Code Generati
2011-01-10 16:46:00 28282 5
原创 #include到底该写在哪
1. 大学学C/C++的时候,大家写.h文件的时候,发现有符号这个文件里没有,就会#include相关的头一下;写.cpp文件的时候,发现有符号这个文件里没有也会#include一下,一直没有出什么问题。2. 再晚些知道了#include是预编译,就是copy一个文件的全部内容到当前#include语句的位置而已,而编译器根本不去编译.h,以及他里面到底是啥。然后隔了很久没用C/C++做很较复杂的程序,直到今天……封装整个DirectDrawManager的时候,我SB了。我想:“反正.h不去编译,我就把.
2011-01-06 18:46:00 6658 2
原创 实现一个均匀Tile的卷轴显示引擎
游戏的卷轴效果主要有两种形式,一种是将游戏分为若干个场景的页面卷轴,比如FC上的洛克人,当人物走到边缘时,就会切换整个场景;一种就是魂斗罗式的那种均匀平铺的卷轴,这种卷动更为平滑。因为我要用在2.5D显示引擎中,只能选择第二种卷轴技术——均匀tile卷轴。1. 卷轴要卷动哪些东西首先要清楚卷动的是什么东西,比如下面的一个KOK1的截图:这是一个典型的2.5D游戏界面,这个界面上的所有元素全都是由位图所组成的,但是不难分析出实际要卷动的只有地面的位图。因为传送门和柱子、树等等都是可以遮挡住人的,即渲染顺序是:
2011-01-03 20:00:00 2330
原创 32BPP窗口模式下24位位图的像素操作(2)
等测距卷轴的逻辑写的差不多了,结果发现之前写的位图至显示表面的代码有些问题,所以重写了一个函数,给定一个表面,基于表面的尺寸和传入的坐标,直接在BITMAP24_PTR上取图,取图后的表面直接就可用,先给出完整代码:int PickBitmap(LPDIRECTDRAWSURFACE7 lpdds, BITMAP24_PTR bitmap, LONG ddsWidth, LONG ddsHeight, LONG cx, LONG cy){ LONG bitmapWidth = bitmap->inf
2011-01-02 22:51:00 1886
3D图形库宽高比透视与屏幕变换示例源代码
2011-02-23
3D图形Demo示例Hello3DWorld源代码
2011-02-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人