Mainu Studio

Banana Game 开发手记 | 让水果真正滚起来

香蕉的弯曲不能只是画面效果。它需要改变玩法,又不能让整个水果堆失去稳定。

为什么不能只用一个圆

圆形碰撞体计算轻、滚动容易预测,但把香蕉整个包进圆里会堵住内弯,其他水果像悬空一样;把圆缩小,又会让水果穿过尖端。

香蕉因此采用沿弯曲轮廓、保留内侧空间的碰撞形状,葡萄等不规则轮廓也遵循相同原则。不过逐像素描边会制造许多小卡点,所以要保留有意义的形状,去掉不影响外观的小凹槽。

游戏里实际使用的香蕉图像,内弯的空位也是玩法的一部分。
游戏里实际使用的香蕉图像,内弯的空位也是玩法的一部分。

水果堆大了,问题才出现

初期版本在几颗水果时稳定,但大堆重量压向同一接点后会抖动。合成结果可能与邻居重叠,小水果可能被凹形困住;较慢设备在显示帧之间会发生更多移动。

单加摩擦会让水果黏住,单加弹性又会让整堆跳起。我们结合平顺轮廓、一次性停用旧水果后再摆放结果、适度摩擦和阻尼,以及下落、旋转、重叠分离的速度限制。

自动合成需要统一处理时机

最初的原型要手动选择相碰的组,现在有效接触就会立刻合成。重复接触通知、一次运动触发多次合成,都不能让同一水果被消耗两次。

参与合成的水果要立即退出处理,而不是等动画结束。分数、代币、声音、图片和物理清理使用同一个合成事件,避免图片消失后留下看不见的碰撞体。特殊组先检查连通性,不满足就马上普通合成,玩法说明也据此修正。

所有平台共用720×1280基准

浏览器、Android和Windows的可用空间、安全区、缩放和输入不同。各自单独摆放曾导致按钮只在某个平台错位或拉伸。

现在统一使用720×1280布局,等比缩放,余白放在棋盘之外。触摸区可以扩大,但中心仍绑定同一坐标,文字与预览也遵循相同倍率。最近邻在整数倍率下清晰,而大多数手机并非整数倍,因此先保证相对位置,再按素材选择滤镜。

同一竖屏棋盘按比例缩放,而不是分别为每个平台拉伸。
同一竖屏棋盘按比例缩放,而不是分别为每个平台拉伸。

性能测试要覆盖真正的难局

稳定的水果可以休眠,直到被其他物体唤醒;装饰、菜单文字不必每帧重建,排行榜行和语言预览也可复用,把算力留给水果堆。

测试包括连续快速投放、大水果旁合成、香蕉上压重物、运动中暂停、浏览器缩放窗口、菜单返回后的操作。不能只凭空场景正常就认定稳定。

保留能理解的意外

水果会小幅滚动、旋转、传递力量,这正是乐趣。即使结果不利,也应该能看出是哪块表面改变了方向。香蕉仍会比圆更难预测,但穿透、持续抖动、隐形碰撞体和跨平台布局错位都属于需要修复的问题。

立即游玩首页