cocos creator 2.0 ,如何在代码里面修改适配宽or高?

如题,该如何解决

没人知道啊。。。。。。。。。。。。

你的需求不太清楚,我也改过源码的适配相关的。
我的是fitWidth模式,但希望最高比例是16:9,如果超出16:9(比如iphoneX),就按16:9
cc.ContainerStrategy.prototype._setupContainer = function(view, w, h)
修改这个函数。

新建一个脚本

if (CC_BUILD) {
    cc.director.on(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function() {
      var canvasIns = cc.Canvas.instance
      canvasIns.fitHeight = true
      canvasIns.fitWidth = false
    })
  }

那你界面,上下两边会被截掉吧

额,那个请问,CC_BUILD是啥。。。。

参考
http://docs.cocos.com/creator/api/zh/modules/GLOBAL-MACROS.html

意思是只有构建出来CC_BUILD才为true吗

直接在ccc中把Fit Height打勾,是这样的效果。

而,用代码改fitHeight = true ,却是这样的???

我ccc中,本就是在角上布局的

并且,我也用了widget组件,左上布局。

这是在2436 × 1125屏幕下

试一下

(function() {
  if (!cc.time) {
    var Timer = window.performance || Date
    var _timerTable = {}
    cc.time = console.time = function(label) {
      _timerTable[label] = Timer.now()
    }
    cc.timeEnd = console.timeEnd = function(label) {
      var startTime = _timerTable[label]
      var duration = Timer.now() - startTime
      // cc.log(`${label}: ${duration}ms`)
      cc.log(label + ':' + duration + 'ms')
    }
  }
  if (CC_BUILD && !CC_DEBUG) {
    console.log = cc.log = function() {}
    console.info = cc.info = function() {}
    console.warn = cc.warn = function() {}
  }

  if (CC_BUILD) {
    cc.director.on(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function() {
      var view = cc.view,
        disignSize = view.getDesignResolutionSize()
      var canvasIns = cc.Canvas.instance
      var designWidth = disignSize.width,
        designHeight = disignSize.height
      var isIphone = cc.sys.platform == cc.sys.IPHONE
      var isAndroid = cc.sys.os == cc.sys.OS_ANDROID
      var isFit = false
      if (isIphone || isAndroid) {
        var frameSize = view.getFrameSize(),
          frameWidth = frameSize.width,
          frameHeight = frameSize.height
        var aspectRatio = 1125 / 2436,
          frameSizeRatio = frameWidth / frameHeight
        isFit = frameSizeRatio == aspectRatio
        if (frameSizeRatio >= aspectRatio) {
          var height = frameHeight * (designWidth / frameWidth)
          view.setDesignResolutionSize(designWidth, height, cc.ResolutionPolicy.FIXED_WIDTH)
        } else {
          var width = frameWidth * (designHeight / frameHeight)
          view.setDesignResolutionSize(width, designHeight, cc.ResolutionPolicy.FIXED_HEIGHT)
        }
      } else {
        view.setDesignResolutionSize(designWidth, designHeight, cc.ResolutionPolicy.SHOW_ALL)
        canvasIns.fitHeight = true
        canvasIns.fitWidth = true
      }
    })
  }
})()

cc.view.setDesignResolutionSize(),我试过这个方法,貌似也不管用。我的是2.0版本

怎样都不对

有人知道怎么回事吗。。。。

我终于知道了!!!!坑!!!结贴

老哥,倒是给个解决办法

cc.view.setDesignResolutionSize()此方法可以改等高或等宽适配,但是改不了,场景canvas的尺寸。

this.node.getComponent(cc.Canvas).fitHeight = true;
this.node.getComponent(cc.Canvas).fitWidth = false;
这种也改不了canvas的尺寸,只有再加上一句:
cc.director.getScene().children[0].width = cc.view.getFrameSize().width / (cc.view.getFrameSize().height / this.designHeight);
cc.director.getScene().children[0].height = this.designHeight;

我是以iphonex为例