为了学习如何在GameMaker中使用物理引擎,我制作了这个周末小项目作为练习,内容只有两个挡板和一颗球。结果开发过程实在太有趣了,根本停不下来。创意源源不断,我想正是游戏的简单性加上GameMaker的易用性,让实现过程变得超级直接了当——感觉GameMaker就是为这种游戏而生的。

我还学会了用Playfab REST API添加排行榜系统,这简直太棒了。其实网络相关的内容只要肯花时间学习并阅读各种文档,真没那么可怕。

给想做类似物理游戏的朋友们一些建议:

  • 如果你想让物体在1080p分辨率下跟随鼠标(或高速移动),建议将房间的像素/米比例从0.1改为0.01左右。否则物体会出现延迟和异常行为。GameMaker手册 说“最佳性能是物体的现实世界尺寸不小于0.1米且不超过50米”,但这对我来说完全没造成任何问题。

  • 另外,不要直接修改物理对象的位置!如果你想让鼠标控制的物体与其他物理对象碰撞交互,需要赋予它真实的线速度和角速度,这样才能推动其他物体。例如,不要这样修改x坐标:
    phy_position_x = mouse_x;
    而应该这样做:
    phy_speed_x = mouse_x - phy_position_x;
    效果完全相同,只不过使用物理引擎移动物体而非瞬间传送。我游戏中上方挡板的实现如下:
    targetPositionX = lerp(minPos, maxPos, clamp(pos, 0, room_width) / room_width); phy_speed_x = targetPositionX - phy_position_x;
    角速度的处理(同样针对上方挡板):
    targetAngle = lerp(rotationRange, -rotationRange, targetPositionX / room_width); phy_angular_velocity = targetAngle - phy_rotation;

点击这里试用Duplexity试玩版

如果愿意的话可以留下评测,那就太酷了!

我也很乐意在这里回答任何问题。本来想写成一篇关于开发心得的超长帖,但意识到不是所有内容都对大家有趣,而且会变成零散内容的堆砌。不过任何问题我都会解答。