摄像机缩放后的边界计算问题

我用摄像机做地图展示,通过修改摄像机的 zoomRatio 来实现地图的缩放,现在遇到一个问题:缩放 zoomRatio 后,地图的边界计算出现问题,会导致黑边。请问有什么方案解决缩放摄像机后的边界计算问题。
这是我目前的边界计算:

// 获取相机最大坐标值
    this.cameraMaxX = 3000 - cc.winSize.width / 2;
    this.cameraMaxY = 2311 - cc.winSize.height / 2;

// 判断方法
    if (newPosition.x > this.cameraMaxX) {
         newPosition.x = this.cameraMaxX;
    }
   if (newPosition.x < -this.cameraMaxX) {
         newPosition.x = -this.cameraMaxX;
   }
    if (newPosition.y > this.cameraMaxY) {
         newPosition.y = this.cameraMaxY;
   }
   if (newPosition.y < -this.cameraMaxY) {
         newPosition.y = -this.cameraMaxY;
   }                  
                
   self.mapCamera.setPosition(newPosition)

我知道缩放后,应该更新this.cameraMax的值,尝试了,不是很精确,不知道有什么完善的方案?

巧了我也用摄像机缩放,只是做游戏界面的缩放

        if (this.camera.zoomRatio > this.maxZoomRatio) {
            this.camera.zoomRatio = this.maxZoomRatio;
        } else if (this.camera.zoomRatio < this.minZoomRatio) {
            this.camera.zoomRatio = this.minZoomRatio;
        }

        // 约束
        let maxX = ((this.gameView.width * this.gameView.scaleX - cc.winSize.width / this.camera.zoomRatio) / 2);
        let maxY = ((this.gameView.height * this.gameView.scaleY - cc.winSize.height / this.camera.zoomRatio) / 2);

        if (this.camera.node.x > maxX) {
            this.camera.node.x = maxX;
        } else if (this.camera.node.x < -maxX) {
            this.camera.node.x = -maxX;
        }

        if (this.camera.node.y > maxY) {
            this.camera.node.y = maxY;
        } else if (this.camera.node.y < -maxY) {
            this.camera.node.y = -maxY;
        }
2赞

谢谢,用你的公式完美解决。

该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。