为了学习如何在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;
如果愿意的话可以留下评测,那就太酷了!
我也很乐意在这里回答任何问题。本来想写成一篇关于开发心得的超长帖,但意识到不是所有内容都对大家有趣,而且会变成零散内容的堆砌。不过任何问题我都会解答。
评论 (0)