摘要: 1. 拖动地图1.1 地图移动原理地图tiledMap是CCLayer的child,把tiledMap的锚点设置成(0.5,0.5),然后setPosition到VisibleSize的中心,那么地图的中心就和屏幕的中心重合了。拖动地图的原理是,移动tiledMap精灵的position,即实质是地图在移动,而看起来好像屏幕在移动。1.2 得到划动向量在ccTouchesBegan确定起始触摸点,然后在ccTouchesMoved确定触摸终止点,得到向量vec即划动屏幕时的一个短时段内的划动向量。把这个划动向量加到tiledMap的getPosition上,即可划动地图。该向量的正负和因子(比 阅读全文
posted @ 2014-01-26 23:22 GAMTEQ 阅读(1057) 评论(0) 推荐(0) 编辑
摘要: 最近一直在做45度斜视角游戏,也就是isometric等容地图,俗称2.5D。地图上物体的前后遮挡是我遇到的第一个问题,总结一下处理方法。遮挡问题(不知道术语),就是比如一个角色站在树后面,那么树要遮挡住角色的一部分,我是用实时修改zorder实现的。1. 制作地图用Tiled制作45度地图时,物体如何放在地图上有2种方法:1.1 标记法:在地图对象层上标记出对象,并且指定该对象的类型。游戏加载地图时,遍历所有的对象,根据其类型,生成不同的精灵:主角、NPC、城墙、建筑等。生成的时候把zorder设置成该精灵所在的瓦块坐标的x分量和y分量之和。比如城墙在(10,20)这个瓦块上,那么其zord 阅读全文
posted @ 2014-01-26 22:42 GAMTEQ 阅读(3541) 评论(0) 推荐(0) 编辑
摘要: 昨天测试“角色被遮挡部分透明显示”功能时,发现角色死亡后,其轮廓精灵不会消失。调试发现,角色在死亡时,其引用计数retain_count居然是9。这是由引用计数混乱引起的内存泄露。加了很多日志跟踪retain_count,又通过调试,终于确定了问题,是我错误使用CCCallFuncN这个CCAction导致的。于是查看cocos2d-x2.2.1源代码了解这个类的实现原理。CCCallFuncN是CCAction的子类,是函数回调动作。我在游戏中用这个类来实现“角色死亡后倒地4秒渐渐消失再删除精灵”功能。PathFinder::_deadAction = CCSequence::createW 阅读全文
posted @ 2014-01-26 21:10 GAMTEQ 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 把小游戏的代码和博客迁移到GitHub上,路径是:https://github.com/GAMTEQ,欢迎访问以下是使用GITHUB的一些命令504 cd code 506 mkdir FaithHero 508 cd FaithHero 510 git init// 拷贝文件到这个目录下,可以包含文件夹 515 git add * 517 git commit -m 'first commit' 518 ls -a 519 pwd 520 git remote add originhttps://github.com/GAMTEQ/FaithHero/FaithHero.gi 阅读全文
posted @ 2014-01-26 21:01 GAMTEQ 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 这几天看了libpomelo的cocos2dx客户端这是个聊天室,由2个场景构成,登录场景LoginScene,聊天场景ChatScene。一. LoginScene客户端是以Login场景来启动的Login场景初始化时先构造各种控件比如文本框,然后为登录按钮绑定登录回调创建menu及其回调CCMenuItemLabel *pMenuItem = CCMenuItemLabel::create(label, this, menu_selector(Login::onLogin));CCMenu *pMenu = CCMenu::create(pMenuItem, NULL);pMenu-> 阅读全文
posted @ 2014-01-26 20:56 GAMTEQ 阅读(992) 评论(0) 推荐(0) 编辑
摘要: 周末折腾了2天环境,主要是从windows迁移到mac上,提升逼格告别山寨,迈向专业化。首先,终于把pomelo的c客户端在xcode上跑起来了,至此已基本解决了网络连接问题。由于是第一次用mac开发,踩了无数个坑。(一)libpomelo的编译安装不是用make而是gyp,gyp貌似下下来就可以了,不用安装,但是要修改环境变量。(二)libpomelo依赖的两个库是libuv和jansson,这两个库已经被打包进libpomelo的源代码中了,可以一起编译出来,一共是三个静态库,没有动态库,但刚开始我以为要自己下载两个依赖库,于是从git上下了代码又自己编了一遍,浪费了很多时间,修改pyth 阅读全文
posted @ 2014-01-26 20:55 GAMTEQ 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 在ubuntu上搭建pomelo环境一 安装node.js不要直接安装nodejs, 因为ubuntu上默认的nodejs版本是0.6的太老千万不要下tar包自己安装, 问题很多正确方法如下:sudo apt-get updatesudo apt-get install -y python-software-properties python g++ makesudo add-apt-repository -y ppa:chris-lea/node.jssudo apt-get updatesudo apt-get install nodejs(来源: https://github.com/j 阅读全文
posted @ 2014-01-26 20:53 GAMTEQ 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 一 概述游戏服务器的本质就是基于长连接的socket服务器。 它利用socket通讯来实现服务器与客户端之间的交互。事实上有不少游戏是直接基于原生socket来开发的。相对于简单的socket服务器,它承受着更加繁重的任务:后端承载着极复杂的游戏逻辑。网络流量与消息量巨大,且实时性要求高。通常一台socket服务器无法支撑复杂的游戏逻辑,因此往往使用一个服务器集群来提供服务。游戏应用只能使用长连接,原因如下:通讯的双向性,游戏应用不仅仅是推拉模式,而且推送的数据量要远远大于拉的数据量响应的实时性要求极高,一般游戏应用要求推送的消息实时反应,而实时响应的最大时间是100ms。二 场景分区游戏交互 阅读全文
posted @ 2014-01-26 20:48 GAMTEQ 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 最近一直在看网游(即MMO游戏)架构的资料, 总结了一些要点1. MMO游戏仿真框架MMO游戏的客户端和服务端架构比较相似,上层是网络层, 负责数据包的收发.底层是游戏仿真层, 负责游戏对象的仿真, 如运动,战斗等游戏中的对象, 比如人物, 怪物, 物品, 障碍, 地图都是仿真对象, 游戏业务逻辑就是这些仿真对象的交互(物理, AI等)client-server的数据流:client的玩家操纵人物, 引起client仿真层的变化,client仿真层的变化数据发送给serverserver用这些数据来更新自己的仿真层server把自己仿真层的变化广播给所有相关客户端client用这些数据来更新自 阅读全文
posted @ 2014-01-26 20:46 GAMTEQ 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 最近开始研究MMORPG游戏的网络编程发现国内关于这方面的书几乎是空白, 于是在亚马逊上搜了些英文书Algorithms and Networking for Computer Games这本书前半部分讲AI算法, 比如寻路和模糊逻辑, 后半部分讲各种网游的算法和技巧NetworkingandOnlineGames这本书基本涵盖了网游编程的方方面面, 对网络底层着墨也很多从丢包,抖动到延迟补偿到数据包嗅探, 还讲了GPRS和3G网络的特点, 最后还有一个搭建网游服务器的实例Massively Multiplayer Game Development 1,2这本书有1,2两册,第一册有中文版,名 阅读全文
posted @ 2014-01-26 20:44 GAMTEQ 阅读(679) 评论(0) 推荐(1) 编辑
摘要: 为主角增加特殊技能火焰箭, 需要用到粒子系统以前看的例子中有做好的粒子效果, 于是直接搬来用目前我理解的粒子系统, 是一个发射器, 按照一定的规律向周围发射粒子(方向, 速度, 衰减, 颜色)发射器同时发射n个粒子, 待粒子衰减后, 回收, 继续发射, 就能实现比较炫的效果cocos2dx的粒子系统, 是由一个png图片和一个plist文件组成, 和tiled_map有点类似.png图片定义了粒子的纹理, plist定义了粒子系统的特点, 入发射规律用喷射粒子来模拟飞行的火箭, 难点就是控制喷射方向首先,要把喷射的初始方向设为x轴正向_jet->setAngle(0);然后,假设飞行方向 阅读全文
posted @ 2014-01-26 20:43 GAMTEQ 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛).Astar算法基于Dijkstra算法,可以理解成,优先寻找离终点的直线距离最近的路径.(距离原点近且距离终点也近)1. 地图建模首先要对地图建模,把地图抽象成图,图由点和有向边表示.对45度瓦块地图建模,以每个瓦块的中心是一个点,每个瓦块有8条边,指向相邻的8个瓦块.(由于边可以由节点算出来,所以为了节省内存,可以不保存边的数据结构)2. 基础数据结构实现Dijkstra算法,要用到以下3个数据结构ve 阅读全文
posted @ 2014-01-26 20:39 GAMTEQ 阅读(4126) 评论(0) 推荐(0) 编辑
摘要: 已知图片上的一个触摸点,怎么求其落在地图的哪个瓦块上?已知:瓦块尺寸64*32pt,瓦块数20*20,地图尺寸1280*640pt如图, 图片的原点是o1地图原点是o2向量:o1p,o1o2地图坐标系的基向量:u,v瓦块的宽的1/2: w瓦块的高的1/2:ho2的坐标: (W, H)p的坐标:(x, y)求:m, n 使得o2p=m*u+n*v解:根据向量减法o2p=o1p-o1o2即o2p=(x, y) - (W, H)=(x-W, y-H)又u=(w, -h)v=(-w, -h)o2p=m(w, -h)+n(-w, -h)则(x-W, y-H) =m(w, -h)+n(-w, -h)得二元 阅读全文
posted @ 2014-01-26 20:37 GAMTEQ 阅读(898) 评论(0) 推荐(0) 编辑