用Go语言来做一个小游戏吧!
为了学习GO语言做了一个简单的2D游戏。游戏中遇到了一些有趣的数学知识,在真实的在代码里体现它之前,还以为会永远用不到这些数学知识。
GitHub仓库: goTraining
2D游戏
对角移动
设置了游戏角色移动速度为5。在x轴与y轴上这没问题,但是如果要对角移动经过了合速度,实际移动速度就无法恒定。这时候就需要计算出缩放因子。
根据勾股定理:
V = 5 Vd = squa(VxVx + VyVy)
缩放因子 Q = 5 / Vd
当每一帧移动发生的时候对 Dx 与 Dy进行缩放: Dx = Dx * Q,Dy = Dy * Q。即可保证对角移动速度恒定为V = 5。
同样可以用数形结合理解,利用三角形等比例缩放。 通过缩放x与y轴恒定一帧内第三边移动距离。
旋转
如果游戏角色旋转点不在游戏角色中心。而在周围某一点,比如游戏角色资源的左上角。想要实现角色原地旋转就需要一点小方法调整旋转点。
在一帧内 平移 → 旋转 → 再平移
第一次平移将旋转点移动到,原来的游戏角色中心点上。第二次平移将角色复位。
矩形是否重叠
要计算矩形是否重叠并不简单。要考虑所有的重叠情况。包括边重叠,一共有4种情况(不详细列举)。考虑它的反面要简单的多,也就是矩形不重叠。
1 | //p2x < p3x || p1x > p4x || p1y < p4y || p2y > p3y |
3D游戏
咕咕