返回

使用 Cocos 创造一个公平的“合成大西瓜”版本:消除屏幕优势,永无止境!

前端

在令人上瘾的“合成大西瓜”游戏中,公平竞赛至关重要。然而,屏幕大小的差异可能会赋予大屏幕玩家不公平的优势。此外,球体跌落消失不见的错误更令小屏幕玩家心烦意乱。

为了解决这些问题,我们使用 Cocos 框架开发了一个公平的“合成大西瓜”版本,消除了屏幕大小优势,并让球体永无止境。

消除屏幕大小优势

我们通过动态调整球体的大小来消除屏幕大小优势。对于大屏幕玩家,球体尺寸会缩小,而小屏幕玩家的球体尺寸会放大。这样一来,所有玩家都可以看到相同数量的球体,并享有平等的竞争环境。

让球体永无止境

为了让球体永无止境,我们修改了游戏物理引擎。我们引入了“弹力墙”,当球体触及屏幕边缘时,它们会反弹回来,而不是消失不见。通过这种方式,球体可以无限期地留在游戏区域,为玩家提供更多合并和得分的机会。

实施技术细节

以下是我们用于实施这些更改的技术细节:

  • 动态球体大小调整: 使用 Cocos 中的 setScale 方法根据屏幕大小动态调整球体大小。
  • 弹力墙: 使用 Cocos 中的 PhysicsBody 组件创建“弹力墙”,防止球体消失不见。
  • 永无止境球体: 通过在球体触及屏幕边缘时将 velocity 重置为零,让球体永无止境。

总结

通过使用 Cocos 框架,我们创造了一个公平、令人兴奋的“合成大西瓜”版本,消除了屏幕大小优势,并让球体永无止境。我们的修改为所有玩家提供了一个公平的竞争环境,让他们可以享受游戏的乐趣,而不受设备限制。

Cocos 实现:

// 动态调整球体大小
Node.prototype.adjustScale = function(factor) {
  this.setScale(this.getScale() * factor);
};

// 创建弹力墙
var physicsBody = new cc.PhysicsBody({
  type: PhysicsBody.Type.EDGE_SHAPE,
  edge: cc.p(-cc.winSize.width / 2, -cc.winSize.height / 2),
  anchor: cc.p(0, 0),
});
this.addComponent(physicsBody);

// 让球体永无止境
Ball.prototype.update = function(dt) {
  if (this.getPosition().x < -cc.winSize.width / 2 || this.getPosition().x > cc.winSize.width / 2) {
    this.setPosition(cc.p(cc.winSize.width / 2, this.getPosition().y));
  }
  if (this.getPosition().y < -cc.winSize.height / 2 || this.getPosition().y > cc.winSize.height / 2) {
    this.setPosition(cc.p(this.getPosition().x, cc.winSize.height / 2));
  }
};