像素碰撞的一种实现

开发日志系列(十二)

环境: cocos2d-x 2.2.3 , win7

碰撞相信大家都不陌生了,无论在手游的游戏按钮对触摸事件的响应 还是页游时代游戏按钮对鼠标点击事件的侦听,都需要使用碰撞来判断.例如以下一个按钮,规格为:200X200,第二张图绿色部分原本为透明

按钮的原图

ButtonHasAlpha

绿色为透明部分

ButtonNoAlpha

坐标矩阵碰撞

类似这样一个按钮 如果是单纯使用坐标碰撞的话,只要坐标落在按钮图片内部,就会判断为点中,在cocos2d-x中坐标碰撞的一般做法是:

//pt 为鼠标 或者 触摸 击落时候的屏幕坐标
//cc  为按钮对象 继承CCNode
CCPoint pos = cc->convertToNodeSpace(pt);
CCRect rect = cc->boundingBox();
rect = CCRectApplyAffineTransform(rect, nodeToParentTransform());
if (rect.containsPoint( pos ))
{
    printf("用户点击了cc");
}

继续阅读“像素碰撞的一种实现”

后会如有期

第一篇与电影有关的琐碎

这是一篇与< 后会无期>有关的感想,我并不是韩寒的粉丝,他是80后我是90后,虽然我读过韩寒的好几本书,但是也没读全,但绝对都是正版.我也不是小四的粉丝,相反还有一点反感他,虽然初中的时候我也读过他的几本书,当然是盗版的,那个时候还不知道镇上什么地方能买到正版书,后面才知道连那时候学校买的的教科书都是盗版的,很难想像通过盗版书能培养出来今天这样一个玩国内游戏还要买正版的我,当然在我支付能力范围之外的国外大作我玩的还是盗版的.说到粉丝,确切的说我还没找到能让我成为脑残粉的人.当然我有很多崇拜的人,很多我希望成为他那样的人的人.

后会无期

继续阅读“后会如有期”

DigitalOcean警告的处理记录

VPS信息:digitalocean,ubuntu,用途:托管本博,开vpn.

事件记录

搜索了一圈发现有很多人因为收到DO警告没处理就直接被封了帐号的,所以把我暂时的处理过程整理成一片流水日志,网上的大多数被封的原因都是由于一个用户注册多个帐号所致,我的并不是这个原因.但是看大家的经历果然还是应该换linode么…

20140721:官方发邮件提醒我的帐号有新的ticket.邮件如下:

Oh no! We've found an issue with your account and issued you a new ticket that needs to be addressed as soon as possible.

Please login to view the ticket:
https://www.digitalocean.com/support

Thanks so much,
DigitalOcean

登录到帐号发现我的vps因为发送垃圾邮件被反垃圾邮件组织警告了,邮件大体如下:(我把部分邮件信息发上来,以方便遇到同样问题的朋友搜索到.我谷歌搜索邮件内容没有找到任何满意的答案…)
继续阅读“DigitalOcean警告的处理记录”

C++静态绑定与动态绑定

开发日志系列(十一)

目前我参与的项目中使用了大量的接口调用,大量的继承(多重继承,多重派生等),其中的大部分都是使用了C++语言的动态绑定特性.既然有动态绑定,哪就相应的肯定有静态绑定,今晚复习了下这个特性.

静态绑定与动态绑定

静态绑定又名前期绑定(early binding),绑定的是对象的静态类型发生在编译期.动态绑定又名后期绑定(late binding),绑定的是对象的动态类型,发生在运行期.简单的说就是:静态绑定在编译完成后已经确定,动态绑定则需要在运行的时候才确定.考虑如下继承:

继续阅读“C++静态绑定与动态绑定”

2dx给Widget添加CCNode

项目开发日志(十)

环境:cocos2d-x 2.2.3,Lua 5.1.

在前几天给cocostudio增加了一个控件 – BigMap(大地图控件),用于承载游戏地图上的所有游戏实体,包括NPC,玩家,可能存在的宝箱,传送门等等.

但是在把实体(基类是CCNode)addChild到控件的时候,只显示了图片的一半,也就是一个三角形,一开始以为是底层BUG,后面发现在UIWidget.cpp源码中有这一句:

void Widget::addChild(CCNode* child, int zOrder, int tag)
{
    CCAssert(dynamic_cast(child) != NULL, "Widget only supports Widgets as children");
    CCNode::addChild(child, zOrder, tag);
    _widgetChildren->addObject(child);
}

继续阅读“2dx给Widget添加CCNode”

实体对象的设计(一)

项目开发日志(九)

在我参与的项目中的实体管理系统据说经过了很多游戏的磨练,本身已经很复杂,我只能记录我的理解,可能在往后的日子里有更深入的理解后会修改下面的一些认识.关于实体系统我可能会分比较多的部分来慢慢说,目前能想到的内容会有:实体对象的设计原则与继承关系,实体对象的属性分配,实体对象的消息.

  • 游戏实体对象

游戏实体系统在游戏编程系列著作< 游戏编程精粹四>中提及.以下摘抄一小段:


现代游戏充满各种各样的实体,玩家,敌人和发射的炮弹.这些要素在游戏世界里乱哄哄的跑来跑去,地形,建筑物,天空和云彩的定义环境.路径点(waypoint),触发器和脚本指导玩家体验.得分,破坏和无力方面组成游戏世界的逻辑和规则.不是对所有东西分别对待,作为特殊目的的要素,把他们结合为一个系统并且提供一个公用的结构和通信方法是很方便的,基于消息的方法来管理实体能够解决很多问题并提供一种方法统一大部分的关键游戏要素 – 摘自< 游戏编程精粹4> 第58页


继续阅读“实体对象的设计(一)”

Chrome配置shadowSocks翻越彼岸

梯子可能大家都不陌生了,加上最近更加严格了,之前一直使用的VPN也出现经常断线的情况.(不要跟我提goagent,维护特别的累,即使是勤劳的小蜜蜂),于是决定改用ShadowSocks.

什么是ShadowSocks?

影梭(Shadowsocks)是一款高性能、跨平台的网络传输加密方案,致力于提供更加安全的互联网访问。

  1. 高性能:基于异步 I/O,事件驱动的程序实现;专为大并发、大流量的应用场景优化;无需保持连接状态,适用于移动设备及无线网络。
  2. 低资源占用:完全以原生代码实现,后台服务内存占用不超过10MB。
  3. 跨平台:可以在PC、MAC、智能手机(iPhone与Android)、甚至路由器(OpenWRT)中运行。
  4. 安全:支持多种加密方案及多种加密强度,提供系统级别的网络数据加密。
  5. 开源:由社区维护的开源项目,包括GPL及MIT两种协议的多种实现。

摘自

继续阅读“Chrome配置shadowSocks翻越彼岸”

DNS污染的一个解决方案

今天博客突然访问不了,只有开了VPN才可以访问.一直很奇怪为什么,一开始以为博客被墙了,后面在zrong兄的指点下才知道原来是本地DNS被污染了(我公司的电脑 和 家里的 手机GPRS居然同时被感染..!!)

什么是DNS污染?

DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。而DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。
继续阅读“DNS污染的一个解决方案”

2dx增加GUI控件

项目开发日志(八)

今天给cocos2dx2.2.3的cocostudio GUI增加遮罩控件,发现步骤还挺多.这里记录一下(省去编写代码的部分):

增加控件相关pkg文件

代码编写完成后,我把代码放到extensions\CocoStudio\GUI文件夹下.这个文件夹是cocostudio用来存放UI控件的默认文件夹.然后在文件夹tools\tolua++中增加控件pkg文件,例如我增加了UIBigMap.pkg,把需要导出给外界使用的函数从控件头文件中复制到pkg中.pkg的写法参照同文件夹下的其他pkg.

继续阅读“2dx增加GUI控件”