开发杂记
n5
在信息时代客观障碍已不复存在所谓障碍都是主观上的如果你想研发什么新的技术你不需要几百万美元的资金你只需要在冰箱里放满比萨和可乐再有一台便宜的计算机和与之献身的决心你即可拥有任何你想拥有的编程境界- John Carmack
展开
-
DirectX学习手记(-)
DirectX学习手记(-) HappyFire 2002/8/2 题记:玩了很多的游戏,不禁萌发了自己做游戏的念头,于是7月份从网上收集了N多资料。7月20几号在家开始了闭关式的学习,一直到昨天,我的第一个地图类封装完毕,并乘胜追击到凌晨3点,做好了地图编辑器的0.9版。早上起来觉得有点累(才睡了几个小时,呵呵),于是把这些天的学习经历回忆一下原创 2002-11-20 08:54:00 · 2860 阅读 · 1 评论 -
原型模式-Prototype
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。 从UML图可知道,原型接口关键是有一个clone方法,clone的实现要注意是浅复制还是深复制,具体看需要了。比如在做配置编辑器时,由于python是对象引用机制,所以我为各个对象增加了c原创 2011-06-07 11:05:00 · 1699 阅读 · 0 评论 -
访问者模式 Visitor
访问者模式(visitor)表示一个作用于某对象结构中的各元素的操作。它可以使你在不改变各元素的类的前提下定义作用于这些元素的新操作。这用于某个对象结构中的元素数目比较固定(基本不会变动),而对于这些元素的操作可能要变化(增加新操作),vistor提供了在某个状态下,对对象结构中各元素的不同操作的访问接口,对象中使用accept接口接受一个具体的访问者。符合open-close原则。原创 2011-06-07 11:06:00 · 2280 阅读 · 0 评论 -
HSV color space
RGB之外的颜色模型虽然之前也知道,但真不知道干什么用的,貌似给人物换色用HSV不错参考:http://zh.wikipedia.org/wiki/HSL_%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4现在我用修改HSV的方法给人物换衣服的颜色,就像RTS游戏中那样。需要换贴图上哪些部分是个问题,我采用mask图标示出来。将mask出来的位置的像素原创 2011-06-07 10:50:00 · 2011 阅读 · 0 评论 -
代理模式Proxy
代理模式:为其他对象提供一种代理以控制对这个对象的访问。这种模式其实就是增加了一个间接层,因此可以附加多种用途。简单的描述就是:服务提供类和代理类实现同一个接口,代理类使用其内部聚合的服务提供类提供服务,服务提供类本身不被客户端访问。这样在任何使用服务提供类的地方都可以使用代理类。代理使用的场合:1,远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存原创 2011-06-07 11:02:00 · 1483 阅读 · 0 评论 -
git学习 - 使用submodule(子模块)管理外链库
git学习 - 使用submodule(子模块)管理外链库submodule是固定commit的clone,默认为head执行git submodule add 或对于新clone下来宿主项目执行 git submodule update后,得到的submodule的clone是处于头指针脱离状态,在其目录中执行git branch可以看到当前没有指向任何分支。去.git/mo原创 2013-04-16 13:33:25 · 21740 阅读 · 0 评论 -
一个lua代码中的bug引起的思考:不要被c++ crash堆栈误导
最近工作中遇到了一个bug,程序crash了,堆栈信息完全不相关,ju原创 2014-07-22 11:16:50 · 4613 阅读 · 0 评论 -
[git] git2.0 默认的push模式
刚升级到git 2.1.2,在push到github时报错:fatal: unable to access 'https://xxxx@github.com/xxxx/xx.git/': Empty reply from servergit pushwarning: push.default is unset; its implicit value has chan原创 2014-11-22 15:29:29 · 4783 阅读 · 0 评论 -
git培训提纲
training 1 Git介绍1. Git是分布式版本管理系统。每个人机器上都有一个版本库。本机版本库和远程版本库进行交互。* git的几个基本特征和概念分布式:本地有仓库,服务器上也有仓库,工作区根目录中的.git目录就是仓库。 仓库之间在物理上是平等的,本地的仓库并不比服务器上的仓库缺少什么。 实际使用时会通过服务器原创 2015-10-09 11:28:28 · 2499 阅读 · 1 评论 -
装饰模式 Decorator
装饰模式用来动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。这个图是用JUDE画的,光看图难以理解这个模式,从书上的例子可以看出,这个模式的关键在于装饰类是被装饰类(Component)的子类,同时装饰类还聚合了被装饰类。装饰类有个类似 setComponent(Component& component)的接口,内部保存了Component对象的引原创 2011-06-07 11:01:00 · 1339 阅读 · 0 评论 -
几个设计原则
单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果你能够想到多于一个的动机去改变一个类,那么原创 2011-06-07 10:59:00 · 1294 阅读 · 0 评论 -
简单工厂模式&策略模式
从一系列同类的对象/算法/规则中抽象出共性-基类,客户和基类打交道,问题是如何选择实例化哪个派生类,简单工厂模式中,使用工厂类实例化派生类,选择过程被封装在工厂类中,客户需要指定一个参数给工厂,工厂按照参数选择实例化出客户需要的派生类。简单工厂模式缺点是:当具体的算法需要改变增加时,就要修改工厂类,当这种改变的需求很频繁时,工厂方法就比较麻烦了。在简单工厂模式中,客户需要知道抽象基类,也需原创 2011-06-07 10:58:00 · 1566 阅读 · 0 评论 -
DirectX学习手记(二)
DirectX学习手记(二) happyfire 2002/8/11此回说说怎样用DirectDraw向表面上贴图,包括创建离屏表面,设置调色板,载入位图到表面,透明色,页面丢失等。二. 用DirectDraw贴图 先让我们回忆一下上一回的内容。为了初始化DirectDraw我们首先创建了一个DirectDraw对象,然后设置了协作模式(全屏+独占),设置显示原创 2002-11-28 09:13:00 · 3045 阅读 · 0 评论 -
AI编辑器设想
如果设计一个AI编辑器,将状态图转换成数据,或者是2进制脚本,在引擎里运行这些脚本。那么对于一个游戏,程序的主要工作就是维护引擎和提供各种GD可用的状态判断方法(获取游戏中各种环境状态的方法)。而GD可以直接编辑AI。更进一步,AI编辑器甚至可以是可视化的,在一定范围内所见即所得。无论怎么想,这都是一个复杂的东西。且关键是如何抽象,尽量提高AI编辑器的复用性。原创 2006-07-09 22:32:00 · 2590 阅读 · 1 评论 -
游戏资源打包方法总结
虽然资源打包是个基本问题,但我几乎没见过有人谈过。所以自己总结一下。本文贴在csdn n5 blog上( blog.csdn.net/n5 ),转载请保持完整性。另外本文是持续补充和更新的。首先,定义两个名词。block :打包数据的单位,可以是一个文件也可以是一个数据块。总之是资源包中的一块数据。包,资源包:即包含多份数据的一个文件。1 block size + block data原创 2007-02-22 22:26:00 · 7005 阅读 · 7 评论 -
在游戏中使用面向对象的FSM
在游戏中使用面向对象的FSM以前一直是用switch的状态机,因为J2ME没办法用太多类,现在改做c++了,终于可以试一试面向对象的状态机了,代码果然简洁了好多。参考的是《Programming Game AI by Example》第2章,大约改了下。首先要定义一个状态基类:template class State{public: State(){} virtua原创 2009-05-09 17:27:00 · 2557 阅读 · 0 评论 -
chipmunk物理引擎的基本概念和基本用法
chipmunk是一个开源2D物理引擎,项目主页:http://code.google.com/p/chipmunk-physics/工作需要研究了一下,这个引擎的资料还是不多,我阅读了所有的文档,7个demo,和一个教学程序,得出如下一些理解。一,基本概念space: 发生物理模拟的空间,可容纳body, shape,jointbody:刚体,可被赋予shape。刚体具有原创 2009-09-20 18:06:00 · 4769 阅读 · 0 评论 -
游戏编程精粹1-6分类目录之通用编程技术部分
游戏编程精粹1-6分类目录之通用编程技术部分----------第一册-------------------------第1章 通用编程技术 1.0 神奇的数据驱动设计(Steve Rabin) 31.0.1 点子1——基础 31.0.2 点子2——最低标准 31.0.3 点子3——杜绝硬编码 31.0.4 点子4——将控制流写成脚本 41.0.5 点子5——什原创 2010-01-17 17:11:00 · 6389 阅读 · 5 评论 -
c++游戏开发中使用json
最近想写一个自定义的动画数据文件,按照原来的做法,先定义一个文本格式的数据文件,然后写一个转换器转换成二进制,然后游戏中读入并解析。不过我最近特别懒,虽然我已经设计了一个“万能的”文本格式和二进制转换工具,但是解析二进制文件的工作仍然繁琐,并且根据以往的经验,可能会经常的修改文件格式,于是我想直接使用文本格式吧,首先想到的是XML,不过最近实在太懒了,连XML都懒得去解析,嗯,还有google原创 2009-11-29 22:46:00 · 7129 阅读 · 13 评论 -
hash vs RBTree
数据结构:最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)接触堆数据结构是在排序里面讲的,空间复杂度O(1),时间复杂度O(NlogN),但是在实践中还是不如快速排序(好像快速排序可以更好的利用硬件特性)。堆的意义就在于:最快的找到最大/最小值,在堆结构中插入一个值重新构造堆结构,取走最大/最下值后重新构造堆结构其时间复杂度为O(logN),而其他方法最少转载 2011-06-07 10:51:00 · 2389 阅读 · 3 评论 -
[go] Socket创建之后,listen/connect之前无法执行操作?
使用go的net库去创建一个tcp客户端连接,使用net.Dial就行,问题是Dial返回的是一个创建好且连接上的connection。如果需要在连接之前对socket做一些操作,就不行了。 比如这个问题: https://github.com/golang/go/issues/21820#issue-256441130 这兄弟是在android上面,需要对socket进行一个“protec原创 2018-01-11 17:24:29 · 860 阅读 · 0 评论