
游戏编程
犀利叔蓝波
这个作者很懒,什么都没留下…
展开
-
山寨Besiege(六)代码托管、重构
停更了好久,一是最近试着找了下新工作费了些精力,二是公司项目比较忙,三是项目从试验阶段进入重构阶段的时候,往往也确实费工夫。现在抽空继续……一、Besige项目现已托管在csdn平台上了!地址:https://code.youkuaiyun.com/obmar45/besige/tree/master考虑到空口说白话对类似重构这种工作很难做到精确到位的描述,这样可能就让难得有少数几个愿意深原创 2016-06-20 03:16:04 · 819 阅读 · 2 评论 -
游戏编程入门学习笔记15——添加动画
最终选定了独眼龙的素材,因为他的行走动画前进和后退相同,而且只有4帧,而出腿动画多达7帧,这比较符合我这个游戏的需要。左右两个小人还是相同算了,这样一是程序上便于处理,二是竞技平衡性更容易达到。我把这11帧动画装进一个2*7的格子阵列里,这样引用更方便。按前文中第一篇参考文章的做法,仅用windows画图来对图片进行对齐处理,效果异常的妙。对齐点的确定我是计算出坐标后用铅笔在图上一个个标黑原创 2013-04-02 15:56:44 · 1029 阅读 · 0 评论 -
游戏编程入门学习笔记36——推倒重来篇——总结、计划
又沉寂了半年,今天说说这段时间都干了些什么,以及下阶段的计划。去年8月中旬,收到一封群邮件,昆明一家做远程医疗的公司招C/C++程序员,当时考虑到已宅家过久,而成为自认为合格的游戏程序员又不知还要多长时间,于是便丢了份简历,然后就是入职、试用、转正、干到现在……然而,昆明靠谱的IT公司凤毛麟角,据我所知,说几近为零也不过分。虽然我凭着自身的一点小聪明,谋得了一份稳定、以及短期内尚可原创 2014-03-30 09:53:57 · 893 阅读 · 0 评论 -
游戏编程入门学习笔记19——网络篇——利用虚拟机测试、降低CPU占用率
因为只有一台机器,调试测试成了问题,我先是在qq上找朋友帮忙测试,后来发现这样不仅麻烦,效果也不好。于是去网上查了下,发现有个叫“虚拟机”的东西似乎可以一用。图省事下了个才100多M的VMware Player,虽然功能不怎么全不过暂时看来是够用了。用法网上很多介绍,这里不罗嗦了。总之现在我相当于有了一个局域网中的两台机器,测试起自己的程序来还是很爽的。 第一个发现的问题就是找原创 2013-04-26 11:48:34 · 1360 阅读 · 0 评论 -
游戏编程入门学习笔记16——又添加第二个小人
几天没更新了,因为去做了一些行业调查和技术需求分析,毕竟方向很重要,一旦方向错了再努力也是白费功夫。下面继续做游戏。 现在要将第二个人物动画也添加上去。这时第二个人物朝向还没翻转过来。我突然有了个灵感,为了画面效果更好,将第二个人物的短裤由红色变为蓝色,这样需要单独再画一幅素材图,顺便可以改变朝向,程序处理上就不需要做任何变动了。不过在此之前,我打算尝试一下对精灵图像进原创 2013-04-10 05:26:01 · 1010 阅读 · 0 评论 -
游戏编程入门学习笔记23——网络篇——显示延时值
假如网络延迟始终保持理想,那真是万事大吉了。但是现在我面临一个很棘手的问题。《PC游戏编程:网络篇》中关于延时同步等问题有几个核心观念:1,客户端需要将操作命令发给服务端,然后等待确认发回才执行。2,服务端提前一段时间将命令发回,以保证两边能在接下来的某一时刻同步开始执行。3,发送的信息中包含服务端的执行周期,假如因为一些意外导致客户端落后于服务端,采取特殊方式补救。第三点先放原创 2013-05-12 20:02:14 · 1256 阅读 · 0 评论 -
游戏编程入门学习笔记22——网络篇——理想延时下的控制
多次测试发现收发不稳定,经常卡死。将输入的ip地址打印出来,发现很多时候按键按快了会输入不了,于是连接了错误的ip地址导致程序无响应,所以根本原因是GetIP函数不稳定。对GetIP()做了些调整,使输入实时显示出来,另外降低了Sleep的时间,这样就无大碍了。另外加入了退格键修改的功能,其间需要做到刷新屏幕的一小部分,像d3ddev.clear函数各参数详细功能这样的问题,可以去查一篇叫原创 2013-05-12 13:25:27 · 1038 阅读 · 0 评论 -
游戏编程入门学习笔记21——网络篇——信息收发
先写了个简单的功能,一旦建立连接则显示connected,在虚拟机上测试通过!下一步实验发送和接收信息。 几番测试达不到预期的收发效果。我开始怀疑虚拟机网络搭建得是否到位。于是互ping了一下,果真不通,一番折腾最后发现是虚拟机的系统自带防火墙没关…最终测试结果:不管在bridge模式还是NAT模式下,都可以达到两机互ping。然后我用经典的《帝国时代2》来做测试,因为这游戏带原创 2013-05-03 04:35:13 · 916 阅读 · 0 评论 -
游戏编程入门学习笔记35——推倒重来篇——《游戏编程入门》示例源码中的两个大bug
(csdn是有很多很傻比的地方的,比如已上传资源无法修改、删除,比如代码框不支持tab,比如草稿箱内容会永久保存在摘要视图中...原文写于8月12日,今天删除重贴一遍,当然这也意味着这里沉寂两个月之后又要动工了)接下来的工作重点放在代码重构上,所以取名“推倒重来篇”。有些基本构想放到后面说,先来讲讲这两天发现原教材中两个bug的过程。 一切起源于我对Direct3D原创 2013-10-11 11:12:10 · 868 阅读 · 0 评论 -
《游戏编程入门》学习笔记4——移动控制
接下来要实现图片的移动。在第六章第二个程序的源代码上修修补补来试验一些简单的想法。这是一个不断绽放着的烟花动画程序,本质是周期性的将一系列图片集(汇集在一张大图上,draw函数可每次绘制其中一部分,也就是我们需要的一帧)的一帧依次轮流绘制一遍。 Copy第五章篮子接炸弹游戏的部分代码来实现键盘输入检测,并根据输入改变draw函数的位置参数。这样便轻松实现了键盘控制左右移动。原创 2013-03-25 11:03:47 · 1088 阅读 · 0 评论 -
《游戏编程入门》学习笔记6——帧率控制、用文本显示调试信息
前面提到如何控制速度的问题,今天猪哥仔细把整本教程翻了个遍,发现作者有点坑爹。事实是这样的,作者在第二章偶尔提了一下这个问题,然后说下一章会详谈,但是到第三章就压根给忘了,直至整本书都再没提过… 所幸,最后一章那个综合性大程序的代码里,有涉及到帧速控制,猪哥给找了出来。 原理很简单, 就是弄个delay值,加上计数基值,在每次gamerun()开始时,提取t原创 2013-03-25 14:20:05 · 1253 阅读 · 0 评论 -
《游戏编程入门》学习笔记7——实现抽象踢腿动作、引入耐力值
如何设计整个出腿及检测踢中机制呢?这是个问题。 做游戏不仅仅是技术,它还是一门艺术。猪哥静下心来慢慢想,可以想到的是最好不要凭空编造这个过程,而应该尽量观察思考真实的人物动作,然后进行简单而又逼真的抽象。 身体必然以矩形来表示,而要点是脚的位置,一旦脚碰到对方身体,可算击中。为了不要搞得太复杂,暂时忽略脚和腿的碰撞问题。 现在已经确定将人物及出腿动作抽象为一矩形原创 2013-03-25 14:38:26 · 1123 阅读 · 0 评论 -
C#设计模式(一)订阅-发布模式
本来是在持续开发Besige,但考虑到以后迟早会在设计模式这块继续拓展,就新开了一个标题,算是个开个头。模式这东西原本可以独立于语言之外来说,但考虑到不同语言的实现毕竟有些差异,我本人搜索文章时,也不喜欢搜出一堆其他语言的参考资料来,为了少制造些垃圾信息积点德,就在标题前加了个C#。订阅-发布模式又称观察者模式,很多资料只是介绍了个大致思想,很难找到把订阅者和发布者最大化解耦的参考原创 2016-07-01 22:55:57 · 2468 阅读 · 0 评论 -
山寨Besiege(七)加入零件朝向的调整操作
前文提到了一些需要处理的细节问题,今天我们来一个个解决:一、轮子的安装位置调整 因轮子尺寸相对立方体木块的不规整性,直接固定在立方体Trigger的位置点,明显是浮空的。我之前想过用额外规定吸附点之类的方式解决此问题,后来转念一想,冒出个最朴素的解决方案:直接对固定位置点作一个调节。 为此我强行oop了一波,把Modules类的LinkTo方法设为v原创 2016-06-25 22:33:09 · 1881 阅读 · 0 评论 -
山寨Besiege(五)车轮
自从有了电,生活真方便。自从有了引擎,做游戏真方便。再度感慨下社会分工合作的神奇,假如自己做一个WheelCollider,不知道复杂到哪里去了。Unity的WheelCollider是个很高端的玩意,不光会滚,还自带悬挂弹力模拟,所以做出像越野摩托那种弹力十足的东西也应该不难。轮子就没什么好贴图的了,直接选讲参数:1.Wheel Damping Rate原创 2016-05-21 05:35:00 · 1385 阅读 · 0 评论 -
山寨Besiege(四)操控轴
这次我们实现转向轴。先贴两个图给个直观印象:题外话一:猪哥考虑过学一学3DMax,一是方便自己做点需要的模型,二是工作中可以更好地和美术沟通,三是某些时候这种复合型淫才的招聘薪资屌爆了。但综合考虑了一下,这种没什么难度但需要一定时间的活还是留到更后面一点再做,先赶程序本职工作最要紧的搞扎实了先。题外话二:我这人好妄自菲薄,刚接触Besiege这个游戏原创 2016-05-21 04:36:28 · 1339 阅读 · 0 评论 -
山寨Besiege(三)需求分析与架构设计
在昆明工作的日子,我虽对经理忽悠的作风极为不屑,但对他整天挂在嘴边的那些软件工程思想还是很尊崇的。无论是传统的瀑布流,还是敏捷开发,无论是大的系统,还是小的功能,先分析需求、再构思设计、再实现的流程是永恒真理。事情还没弄清楚就开始动手做,是初学者的幼稚行径,越成熟的设计师,越是重视前期的需求分析,思路清晰后,编码也只是“唰”一下的事情了。习惯总得从无到有养成。所以这次我刻意走一个完原创 2016-05-08 15:46:58 · 1415 阅读 · 0 评论 -
山寨Besiege(一)计划
去年我玩到一款游戏叫做《Besiege》,号称steam三大收割膝盖之一的神作,确实一分钟就爱上了它。然后自己在家初步仿制了一下手机版,现在是这个样子:中间浅色木箱是核心块,深色的是新加木块,从左下角图标中拖出零件,拖动中会有提示图标,拖到能安放的地点时会有提示木块出现,松手则确认组装。然后点击右上角的运行按钮,箱子摔下来变成这样:零件间的粘合力是我原创 2016-05-01 00:18:14 · 880 阅读 · 0 评论 -
《游戏编程入门》学习笔记13——初步添加音效
这个很简单,直接翻开第11章抄几个函数完事。当然借助现有源码资源一时不难实现。要自己写的话还是得研究个几天的。 音乐音效在游戏作品里是很重要的元素,音乐本身是个很神奇的东西,我们无法解释什么样的配音才是正确的,美与不美,合不合适都只能凭感觉判断,这该属于艺术家的工作范畴。 我记得很久以前在红白机上玩一个叫碰碰车的游戏,结果那个背景音乐是柴可夫斯基的第一交响曲原创 2013-03-25 21:41:23 · 998 阅读 · 0 评论 -
《游戏编程入门》学习笔记2——启程
至此时为止,猪哥未曾做成过任何一款游戏程序,只是估计自己有了这个能力,但是还未经实践检验,即未来成败尚未可知。 这里选择边做边记录的方式,有以下两点原因: 1,督促自己坚持下去,同时给自己信心,先从一个个小的难题入手,再去翻越那些大山。 2,也算是个开发日志,方便日后回顾。 鉴于自己是个纯小白,这一系列文章自然不可能算是教程原创 2013-03-25 10:26:43 · 1346 阅读 · 2 评论 -
游戏编程入门学习笔记34——中场休息——近期的一些心得
一个多月没更新这里了,大致说下近期的一些收获。1,页游程序的整体架构前端用AS3作一些图形和逻辑处理,然后通过网络发送消息与服务端通讯。相对端游而言,服务端的工作量比重应该占得更大,服务端自己做了一个像windows那样的消息处理机制,供各模块及客户端间交互。2,数据库的重要性只要是游戏,必然存在大量的数据,角色信息、地图信息、物品信息等,这些必然要交由数据库来处理。各模块代码原创 2013-08-04 00:43:05 · 747 阅读 · 0 评论 -
游戏编程入门学习笔记31——菜单篇——虚拟键码到DirectInput键码的转换
更多的细节处理先放一边,接下来考虑关于操作键的全局变量如何设定问题,即如何保存再如何使用,这样也好明确该如何保存edit内的信息。 之前只是copy了《游戏编程入门》里的DirectInput按键处理函数,对其内部机制还没深入研究,于是重新理解相关代码。DirectInput的键盘状态似乎储存在一个256字节空间的缓冲区中,每个键按虚拟码的排列顺序对应一个字节,具体顺序可在dinput原创 2013-06-15 11:05:23 · 2011 阅读 · 0 评论 -
游戏编程入门学习笔记27——卡死问题、多线程初窥
之前的程序中经常遇到一个问题,需长时等待的while循环会导致程序进入无响应状态像死了一般,加入Sleep函数也无法解决。这时传说中的“多线程”大概就是一剂良药。诸多前辈的入门文章及各大公司的招聘信息都让这一技术的重要性彰显无遗。既然绕不开这座大山,翻过它则成了唯一选择。下面开始。 首先自然是学习资料的搜寻。综合类游戏编程书籍关于多线程的介绍往往少之又少,仅能用作复习回顾。原创 2013-05-25 21:36:51 · 1188 阅读 · 0 评论 -
《游戏编程入门》学习笔记1——缘起
(2018.9.12 补记:后来2014年末学了Unity3D引擎,2015年跟着做了个商业项目,回头再看这种无引擎从Windows编程入手的学习方式,觉得太累,不过也并非完全没价值。建议新手还是从Unity3D入门吧,要了解更多Windows平台的原理,可以随便看看这本书参考下,总体来说这个系列的文章写的很烂,学习价值不大,仅供自己玩耍罢了。) 第一次萌生做游戏的想法...原创 2013-03-25 09:39:54 · 1239 阅读 · 1 评论 -
游戏编程入门学习笔记14——寻找动画素材
从这篇开始标题里故意把书名号去掉了,因为接下来的工作已经和《游戏编程入门》这本教材关系不大,需要自己动脑解决,还得从其他渠道寻求帮助。 上回游戏做到一半,因为工作变动停顿了下来,这一放就是三个月。今天宅在家再度开工的时候,很有一种生疏的感觉。安装vs2008、DirectX SDK,结果又把顺序搞反了,只好手动设置DX9的头文件和库文件路径。回顾代码找感觉,发现有段涉及到模板的代码原创 2013-03-30 11:57:05 · 1585 阅读 · 0 评论 -
游戏编程入门学习笔记30——菜单篇——窗口子类
我的目标是做一个各对战平台打dota时自定义快捷键的那种对话框。 一开始的想法是只允许对话框输入一个大写字母,然后每次获得焦点时清空对话框。但是这样明显存在一个问题,就是无法使用TAB、CTRL等游戏时常会用的快捷键。默认的edit是不接受这些非文本键输入的,所以预期需要对键盘消息进行处理,然后自定义相应的显示字符。 因此重看《windows程序设计》关于键盘的章节。原创 2013-06-15 10:20:46 · 886 阅读 · 0 评论 -
《游戏编程入门》学习笔记11——添加背景、血量条
再想想要形成一个可供试玩的雏形,还有哪些要做? 1, 设置天台,也就是活动范围,一方超出天台边缘时,游戏结束、显示结果。这里将背景画面载入的问题一并解决。 2, 加入血量条显示。并在一方空血时,结束游戏、显示结果。 3, 加入耐力条显示。 在比赛结束时,发现FontPrint函数不奏效,原来这个一定要放在BeginSce原创 2013-03-25 21:32:02 · 1796 阅读 · 0 评论 -
《游戏编程入门》学习笔记8——添加第二个小人
下一个目标:添加进另一个角色,实现两个人物的显示和控制! 在进行下面的工作之前,先整理下代码。因为之前的工作都是半实验性质,所以代码添加得都很随意,有些不是很规范,但是不知不觉中,项目完工的那一天似乎都指日可待了,哈哈。之后可能会有很多新的创意加入,代码会变得越来越复杂,这时良好的习惯能保证以后的工作不太容易出错。 总之,回顾全部代码,去除冗余,将常量宏定义一律规范为大写原创 2013-03-25 14:51:01 · 1208 阅读 · 0 评论 -
《游戏编程入门》学习笔记12——阶段性计划
灵魂建立之后,还要给这具会动的怪模怪样的骷髅加上皮肉,让它看起来不要那么糟糕。 先做个计划,想一想现在还需要做哪些工作: 1, 没有人物动作动画。 这是个老大难问题,猪哥又不是什么专业美工,而且预计要让动画与骨骼动作相匹配,还有一些技术细节要解决。拖一拖吧… 2, 没有音效。 3, 游戏的各种数值设定。原创 2013-03-25 21:38:49 · 720 阅读 · 0 评论 -
《游戏编程入门》学习笔记10——击中检测及后果
今天要做的是,在每次检测完按键并计算出人物位置之后,绘制人物画面之前,插入击中判断及计算相应后果的代码。 先看一下具体该做些什么: 1,将前进速度和后退速度区分开来,以宏定义,便于调试。 2,引入前进、后退状态变量,如此出腿时即可由此变量来确定速度影响因子。想到一个更好的主意,这个状态变量值可以随前进距离累积,从而更大的影响速度,如此避免原地不动但是临时按下前进的投机原创 2013-03-25 21:16:07 · 898 阅读 · 0 评论 -
《游戏编程入门》学习笔记5——关于规则的初步思考(策划)
理论上是先有策划再有制作。 前面的一些动作都是猪哥在技术不成熟的情况下做的一些预备练习。 但是灵感这个东西是随时闪现的,往往不受控制。今天猪哥大致思考了一下这个游戏该如何设定规则才能初具可玩性,有些想法先记录在这里。 我要做的是一个格斗游戏。像街霸拳皇那种,太复杂了,不适合初学者。甚至像任天堂红白机上的《功夫》那种能够跳跃并精确命中身体各部原创 2013-03-25 11:19:27 · 795 阅读 · 0 评论 -
《游戏编程入门》学习笔记3——编译器设置、透明色
初步计划先实现简单的精灵左右移动,动画用现成的素材。 晚上鼓捣了两小时,很悲催的只解决了一个基本问题——如何编译一个程序并得到可在别人电脑上正常运行的exe文件? 小常识: 1,编译时提示找不到头文件怎么办? 看下DirectX SDK安装了没有… 要是先安装的DirectX SDK再安装的VS2008,可以按书中附录原创 2013-03-25 10:48:43 · 1064 阅读 · 0 评论 -
游戏编程入门学习笔记17——网络篇——显示本机IP
沉寂好多天,总算有了进展。 上回说了,要加入网络对战功能。猪哥在这方面是一窍不通,首先肯定是要去找些资料来学习。搜搜关键词socket、winsock、windows网络编程,入门文章还是一大把的,但这些小文章都讲得不清不楚的,懂的不用看,不懂的还是看不懂。这里推荐两本书:1、《Windows网络编程(第二版)》 Network Programming For Microsoft Wi原创 2013-04-22 16:14:18 · 999 阅读 · 1 评论 -
游戏编程入门学习笔记28——菜单篇——了解MFC
(接下来的工作都和菜单有点关系,包括各种“windows资源”的应用、对话框、富文本控件等。所以统一命名为“菜单篇”。) 一晃又是十天没动静,可以想象猪哥必然又是吃了一大口翔。上次说到“搞定MFC”,好吧,我解释下,其实意思是“搞定对MFC的初步了解”。下面说下这些天的一些领悟。 首先介绍一本书:《Windows程序设计》Charles Petzold 著 比较老,最后一版成书于上原创 2013-06-04 16:40:33 · 905 阅读 · 0 评论 -
游戏编程入门学习笔记26——AI篇——AI的实现
开始几次编的AI都能被自己轻松打败,几番修正最后才算成功编出无敌AI,再简单的问题,也会犯错,思虑要周全。发现有这么几个问题需要注意: 1,原程序存在严重bug,即我仅在按出腿键不放直到出腿帧变化为未完全出腿状况后作了收脚处理,这样就导致完全出脚后放开动作键,脚实际永远停留在空中,导致AI多次傻乎乎上来挨揍掉血…所以必须在前进、后退、无动作时均保证收脚。 2,原程序存在的第原创 2013-05-21 16:26:40 · 1159 阅读 · 0 评论 -
游戏编程入门学习笔记25——AI篇——AI策略的制定(策划)
按前文的构思很快改好了程序,暂未发现异常。现在可以开始做AI了。 因为我这个游戏比较简单,只要在合适的距离出腿就行了,所以理论上我可以编出一个无敌的电脑选手。具体按这个策略:在每一个循环结束时,如果双方距离大于腿长减去对方步长,则前进,否则出腿。当然仅仅这样也会有漏洞,假如对方在你即将进入攻击范围内的那一瞬间出腿,下一步就撞在枪口上了。所以在距离仅差一步时,要加上对对方动作原创 2013-05-19 11:50:48 · 1088 阅读 · 0 评论 -
游戏编程入门学习笔记24——AI篇——游戏规则的逻辑完备性论证(策划)、随机数生成
在编写一个AI之前,我需要做一件事。之前因为动画素材的限制,去除了很多原本策划好的构建出游戏可玩性的设定。但是我可不希望自己的第一个作品,仅仅是个可操控小人走路的傻逼演示,就算画面再无节操,它还是得有一套合理的竞技机制。所以现在我要恢复一些设定,让其能被称为游戏。1,假如按速度为步长的倍数这一设定来调整人物位置,动画必将出现滑步现象。所以只能取消这一设定,使步长随耐力变化,而人原创 2013-05-18 17:03:06 · 957 阅读 · 0 评论 -
游戏编程入门学习笔记20——网络篇——理清框架、获取字符串输入
有件事必须先搞明白,就是网络部分的代码究竟应该塞进整个程序的哪一部分?我重新撸了遍MyWindows.cpp,发现对windows程序的框架理解还很模糊。急着去实现某些功能可能得不偿失,有些迟早都会用到的技巧早点知道更好。于是干脆翻了遍《Windows游戏编程大师技巧》,很有收获。别的先不说,首先提醒了我做一个游戏开始前的菜单选项。学会使用状态机switch case这玩意让结构变得清原创 2013-04-30 14:51:55 · 854 阅读 · 0 评论 -
游戏编程入门学习笔记18——网络篇——初步建立连接
随后的工作中,我发现因为自己各种基础知识的薄弱,每前进一步都会遇到n个节外生枝的问题。 整理下代码,建立自己的MyWinsock.h和MyWinsock.cpp。遇到个重复定义的问题,解决见下:关于WINSOCK.H与winsock2.h中的重定义解决办法分析 http://eggbucket.iteye.com/blog/1140232 然后我试图不利用消息框,原创 2013-04-25 17:45:14 · 845 阅读 · 0 评论 -
游戏编程入门学习笔记33——菜单篇——chm文档嵌入exe
我一直想将自己的简历和源代码等资料嵌入exe文件并可在菜单栏点击查看,很明显单纯依靠那种简单的about对话框是达不到理想效果的。调查思索一番后大致发现三条路线:1,利用richedit2.0控件。2,利用CHtmlView类制作CHtmlCtrl控件,在对话框中使用来显示html文档。3,利用chm文件。 第一种方案纯属最初看到富文本控件这个名词后的一种幻想和臆测,实际情原创 2013-06-18 01:52:42 · 1382 阅读 · 0 评论