服务端Box2D进阶

此文紧接我的上一篇博文 – 服务端Box2D入门,进阶篇会以更加贴近实际工程的角度来对入门篇的内容进行优化。box2d

首先我们看看入门篇遗留的一些问题:

密度

在Box2D中,刚体的密度(density),但是千克/平方米(因为是2D,所以不是立方米),默认值是0千克/平方米。

所以我们若把密度设置为1,形状设置成SetAsBox(1.0f, 1.0f),那么这个刚体的重量是4千克。

冲量、力、速度的关系

首先我们看看力、速度、时间、刚体质量之间的关系:

力 = 质量 * 速度 / 时间

那么冲量是什么呢?它就是力在一定时间的内的积累:

冲量 = 力 * 时间

所以我们可以得到:

冲量 = 质量 * 速度

那么对于入门篇中,帧时间为1/60秒刚体质量为4千克

Read More →

服务器端Box2D入门

Box2D是一个用于游戏的2D刚体仿真库。它的核心目的是为了模拟真实的2D环境,让物体运动更加真实,交互性更好。本文主要介绍一些使用Box2D的基础知识,并且记录如何在没有图形化界面的Linux服务器上使用它。(例子就是我使用的这台:D)。box2d

Read More →

12306购票流程全解析

顺利的用自制程序抢到回家的火车票,也不枉费我这两周从一个服务器端程序员伪装成客户端程序员利用Chrome DevTools一段一段的挖12306的协议,同时满足了我今年的一个小心愿 – 自制12306程序并且可以实现简单刷票功能。%e8%bd%a6%e7%a5%a8

代码编写的核心使用了 PHP – Client URL Library(Curl)

未研究验证码自动识别,言外之意就是说在Login时需要手动点击验证码,在购票时也需要手动点击输入;

理论上来说这里没有使用什么黑科技(验证码自动识别之类的),只是简化了购票流程;

文章最后更新与2017-01-04,因为12306协议变动比较频繁,若未来协议流程无法与本文对应,请见谅(会尽力保证更新,同时更新日期)。

Read More →

Hook Library Function

前些天在琢磨微信协程库(libco),对库里Hook Library Function相关内容比较感兴趣,自己寻找相关的资料手动实践了一遍,确实很有意思。

核心参考文档 – 点击这里

理解Hook

一般来说我们调用系统API过程是这样:

Program -> Library Function -> System Call

举个例子,如果我们遇见这样的需求:把项目中调用malloc和free的地方打印日志,用作系统调优或者其他。

会遇见2个难题:1、从libc中malloc、free实现处做修改,这样需要重新编译整个libc和项目;2、日志应该是程序级的,若实现了1,那么在该机器上其实使用libc的项目不是也被“修改”了。

所幸Hook技术一直存在,形如:

Program -> Hook -> Library Function -> System Call

这样我们可以在不修改libc源码的情况下满足需求,并且做到程序级的修改。或者比如像Libco一样,hook住socket相关的系统调用添加自己超时相关逻辑。

Read More →

Pokemon-Go地图技术猜想

pokermon-go盛夏的七月,一款名为Pokemon-Go的游戏火了。基于LBS+AR玩法,使用的宠物小精灵的IP,让千万玩家穿梭于城市之间收集自己心爱的精灵,其核心功能之一便是模拟真实地图,让玩家“身临其境”的奔跑在地球上,那么地图功能是如何实现?

Read More →

让我们谈谈游戏服务器开发(上)

从毕业至今,大约从事了4年的游戏服务器开发工作。其中页游2年,手游2年,端游虽然没有接触过实质的开发,但是同从事端游服务器开发朋友闲聊中也或多或少了解一些。想整理一些思路,沉淀成文字,以讨论页/手游服务器开发为主,端游为辅助。首先谈谈很有争议的开发语言选择吧。

Read More →

Anti-Cheat – 实现一种检查内存被修改的方法

这个Anti-Cheat方法为了解决什么问题?

一般来说,一款网页\手机游戏纯靠客户端来解决反作弊(Anti-Cheat)几乎是不可能的。在这种情形下,页游\手游客户端(后文均称游戏客户端)可以利用一些手段来增加作弊\破解人员的成本,包括但不限于:代码加密,代码混淆,隐藏明文,内存混淆(加密)……

这个方法主要是避免\检测出类似CE工具对客户端内存进行恶劣修改达到关键数据变更的行为,属于上面提到的内存混淆(加密)类。

本文建立在所有源码未被对方知晓的情况下进行操作……

Read More →