GRoot在Canvas不同fit height/fit width选项下位置错位
FGUI版本最新,COCOS 版本 2.4.0,预览分辨率 IPHONE X
同时勾选 Fit Width,Fit Height 显示正常
只勾选 Fit Width,显示偏上
只勾选 Fit Height, 显示偏左
都不勾选,显示有所放大
getDesignResolutionSize获取设计分辨率来计算位置,表现上能解决问题,
能否请问一下谷主这样做会不会有什么问题,以及为什么会产生偏移。
附:cocos Viewport的计算代码
getViewportRect,
var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);
同时勾选 Fit Width,Fit Height 显示正常
只勾选 Fit Width,显示偏上
只勾选 Fit Height, 显示偏左
都不勾选,显示有所放大
GRoot.prototype.onWinResize = function () {我使用
//fgui 历史代码
// var size = cc.view.getCanvasSize();
// size.width /= cc.view.getScaleX();
// size.height /= cc.view.getScaleY();
// var pos = cc.view.getViewportRect().origin;
// pos.x = pos.x / cc.view.getScaleX();
// pos.y = pos.y / cc.view.getScaleY();
// this.setSize(size.width, size.height);
// this._node.setPosition(-pos.x, this._height - pos.y);
// //可用大小
// var size = cc.view.getVisibleSize();
// //设计大小
var canvasSize = cc.view.getDesignResolutionSize();
// //方案二 始终保持全屏
// //认为的全屏大小
var size2 = cc.view.getCanvasSize();
size2.width /= cc.view.getScaleX();
size2.height /= cc.view.getScaleY();
var pos = cc.v2((size2.width-canvasSize.width)/2,(size2.height - canvasSize.height)/2);
this.setSize(size2.width,size2.height);
this._node.setPosition(-pos.x, size2.height - pos.y);
this.updateContentScaleLevel();
};
getDesignResolutionSize获取设计分辨率来计算位置,表现上能解决问题,
能否请问一下谷主这样做会不会有什么问题,以及为什么会产生偏移。
附:cocos Viewport的计算代码
getViewportRect,
_buildResult: function (containerW, containerH, contentW, contentH, scaleX, scaleY) {
// Makes content fit better the canvas
Math.abs(containerW - contentW) < 2 && (contentW = containerW);
Math.abs(containerH - contentH) < 2 && (contentH = containerH);
var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);
// Translate the content
if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS){
//TODO: modify something for setTransform
//cc.game._renderContext.translate(viewport.x, viewport.y + contentH);
}
this._result.scale = [scaleX, scaleY];
this._result.viewport = viewport;
return this._result;
},
var viewport = cc.rect((containerW - contentW) / 2, (containerH - contentH) / 2, contentW, contentH);
没有找到相关结果
已邀请:
2 个回复
谷主
赞同来自:
pengpeng
赞同来自:
如果你使用widget组件适配节点的尺寸让canvas和摄像机的尺寸都是实际分辨率就不会发生偏移。
虽然对你应该没用了,希望下面的人不用踩坑