图来自传送门
时光如梭
两年前的今天,我进入到这家手游公司,也正式开始了程序员
这份工作.在这之前都空有写代码的属性
而无用武之地.在这两年的时间里,共参与了两个手游项目,回顾两年来玩过的东西真的不堪入目.
光荣在于平淡,艰巨在于漫长
致力于DAsm+C,MASM
图来自传送门
时光如梭
两年前的今天,我进入到这家手游公司,也正式开始了程序员
这份工作.在这之前都空有写代码的属性
而无用武之地.在这两年的时间里,共参与了两个手游项目,回顾两年来玩过的东西真的不堪入目.
C++Primer
中并没有对const过多的解析,只说明为是一个使变量不可修改的限定符.但是仅仅知道这点对于我来说是远远不够的,const是怎么做到的限制修改?谁在帮const做这个限制?编辑器是怎么实现不可修改的?在认识const之前 我知道C++中唯一不可修改的就是常量,例如:
int i = 1000;
这个1000就是常量,除了修改生成的文件之外 任何方式都无法修改这个1000 .(修改生成的文件是怎么修改?例如生成了exe可执行文件,直接定位到代码区 找到这个变量定义的地方 把 1000的字节码E8 03 00 00改了..).
服务端配置:ubuntu14/32bit
现在把服务端的也说一下,网上也有很多的配置教程,但是和我的配置都有点差别.由于是配置到私人的vps上,所以我希望能限制IP访问.我的vps曾经被攻击过,并被运营方警告,所以这方面得小心翼翼才行.
配置过程中我参考了一下两个地方:
根据这两篇教程配置的在vps应当可以运行SS服务器了.但是由于我需要限制IP使用.所以把端口限制改了一下,首先是安装配置iptables,安装完毕后对shadowsocks端口做出限制访问策略:
// 把端口先全部封掉 // 例如4000 是之前配置服务器设置的端口 iptables -I INPUT -p tcp --dport 4000 -j DROP // 对特定IP允许访问 // 116.*.*.42 为你使用ss客户端的本机IP iptables -I INPUT -s 116.*.*.42 -p tcp --dport 4000 -j ACCEPT // 保存 iptables-save
如此就只有我本机的IP能访问端口进行翻墙了.
开发日志系列(十二)
环境: cocos2d-x 2.2.3 , win7
碰撞相信大家都不陌生了,无论在手游的游戏按钮对触摸事件的响应 还是页游时代游戏按钮对鼠标点击事件的侦听,都需要使用碰撞来判断.例如以下一个按钮,规格为:200X200,第二张图绿色部分原本为透明
按钮的原图
绿色为透明部分
坐标矩阵碰撞
类似这样一个按钮 如果是单纯使用坐标碰撞的话,只要坐标落在按钮图片内部,就会判断为点中,在cocos2d-x中坐标碰撞的一般做法是:
//pt 为鼠标 或者 触摸 击落时候的屏幕坐标 //cc 为按钮对象 继承CCNode CCPoint pos = cc->convertToNodeSpace(pt); CCRect rect = cc->boundingBox(); rect = CCRectApplyAffineTransform(rect, nodeToParentTransform()); if (rect.containsPoint( pos )) { printf("用户点击了cc"); }
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++语言的动态绑定
特性.既然有动态绑定,哪就相应的肯定有静态绑定
,今晚复习了下这个特性.
静态绑定与动态绑定
静态绑定又名前期绑定(early binding),绑定的是对象的静态类型发生在编译期.动态绑定又名后期绑定(late binding),绑定的是对象的动态类型,发生在运行期.简单的说就是:静态绑定在编译完成后已经确定,动态绑定则需要在运行的时候才确定.考虑如下继承:
项目开发日志(十)
环境: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); }
项目开发日志(九)
在我参与的项目中的实体管理系统据说经过了很多游戏的磨练,本身已经很复杂,我只能记录我的理解,可能在往后的日子里有更深入的理解后会修改下面的一些认识.关于实体系统我可能会分比较多的部分来慢慢说,目前能想到的内容会有:实体对象的设计原则与继承关系,实体对象的属性分配,实体对象的消息.
游戏实体系统在游戏编程系列著作< 游戏编程精粹四>中提及.以下摘抄一小段:
现代游戏充满各种各样的实体,玩家,敌人和发射的炮弹.这些要素在游戏世界里乱哄哄的跑来跑去,地形,建筑物,天空和云彩的定义环境.路径点(waypoint),触发器和脚本指导玩家体验.得分,破坏和无力方面组成游戏世界的逻辑和规则.不是对所有东西分别对待,作为特殊目的的要素,把他们结合为一个系统并且提供一个公用的结构和通信方法是很方便的,基于消息的方法来管理实体能够解决很多问题并提供一种方法统一大部分的关键游戏要素 – 摘自< 游戏编程精粹4> 第58页
梯子可能大家都不陌生了,加上最近更加严格了,之前一直使用的VPN也出现经常断线的情况.(不要跟我提goagent,维护特别的累,即使是勤劳的小蜜蜂),于是决定改用ShadowSocks.
什么是ShadowSocks?
影梭(Shadowsocks)是一款高性能、跨平台的网络传输加密方案,致力于提供更加安全的互联网访问。
今天博客突然访问不了,只有开了VPN才可以访问.一直很奇怪为什么,一开始以为博客被墙了,后面在zrong兄的指点下才知道原来是本地DNS被污染了(我公司的电脑 和 家里的 手机GPRS居然同时被感染..!!)
什么是DNS污染?
DNS污染是一种让一般用户由于得到虚假目标主机IP而不能与其通信的方法,是一种DNS缓存投毒攻击(DNS cache poisoning)。其工作方式是:由于通常的DNS查询没有任何认证机制,而且DNS查询通常基于的UDP是无连接不可靠的协议,因此DNS的查询非常容易被篡改,通过对UDP端口53上的DNS查询进行入侵检测,一经发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器(NS,Name Server)给查询者返回虚假结果。而DNS污染则是发生在用户请求的第一步上,直接从协议上对用户的DNS请求进行干扰。
继续阅读“DNS污染的一个解决方案”