cocos2d-html5- v2.0 等比缩放

来源:未知 责任编辑:智问网络 发表时间:2013-11-10 20:12 点击:

最近比较忙,好久没看过ch5了。现在ch5已经正式发布,api和模板文件有挺大的变化。我相信,如果有基础的人适应新的变化是没有问题的,所以我没打算重写之前的关于ch5的博客。

看了新版本的helloworld例子,发现游戏界面自适应浏览器窗口进行缩放。认真看了这个例子后发现了一些不足之。

1. 调整缩放的函数居然写在一个scene里面

2. 缩放效果不是很好,当窗口的高宽比和目标高宽比不同时,会出现滚动条

3. 没有垂直和水平居中

于是我对其进行了修改:

1. 将调整缩放的函数抽出来发到一个单体里面

[javascript] 
//GameFunc.js 游戏的全局函数 
var Game=Game||{}; 
Game.Func=(function(){ 
    var instance; 
    function constructor() { 
        return { 
            adjustSizeForWindow:function () { 
                //目标高宽比 
                var targetRatio=cc.originalCanvasSize.height/cc.originalCanvasSize.width; 
                //窗口高宽比 
                var winRatio=window.innerHeight/window.innerWidth; 
 
                //重新设置画布的大小,使画布高宽比与目标高宽比相同。 
                //根据比例,设置高度或宽度与窗口大小一样 
                if (winRatio<=targetRatio) { 
                    cc.canvas.height = window.innerHeight; 
                    cc.canvas.width=window.innerHeight/targetRatio; 
                }else{ 
                    cc.canvas.height = window.innerWidth*targetRatio; 
                    cc.canvas.width=window.innerWidth; 
                } 
 
                //缩放比例 
                var xScale = cc.canvas.width / cc.originalCanvasSize.width; 
 
                //设置垂直和水平居中 
                var parentDiv = document.getElementById("Cocos2dGameContainer"); 
                if (parentDiv) { 
                    parentDiv.style.width = cc.canvas.width + "px"; 
                    parentDiv.style.height = cc.canvas.height + "px"; 
                    parentDiv.style.position = "absolute"; 
                    parentDiv.style.top = "50%"; 
                    parentDiv.style.left = "50%"; 
                    parentDiv.style.marginLeft = (-cc.canvas.width / 2) + "px"; 
                    parentDiv.style.marginTop = (-cc.canvas.height / 2) + "px"; 
                } 
                //重置坐标 
                cc.renderContext.translate(0, cc.canvas.height); 
 
                //内容缩放 
                cc.renderContext.scale(xScale, xScale); 
                cc.Director.getInstance().setContentScaleFactor(xScale); 
            } 
        } 
    } 
 
    return{ 
        getInstance:function () { 
            if (!instance) { 
                instance=constructor(); 
            }; 
            return instance; 
        } 
    } 
})(); 

这是一个延时实例化的单体,因为在游戏为加载好之前我们不能用一些ch5的类

2. 修改main.js,在游戏加载好后调整缩放,并监视窗口的resize

在applicationDidFinishLaunching函数中,在return之前添加以下代码


[javascript] 
Game.Func.getInstance().adjustSizeForWindow(); 
        window.addEventListener("resize", function (event) { 
            Game.Func.getInstance().adjustSizeForWindow(); 
        }); 

ok。。。

 


 

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • cocos2d-x学习笔记(19)--label 、label atlas
      • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
      • Cocos2d-x学习(一):HelloWorld
      • cocos2dx在xcode下开发,编译到android上(2)
      • cocos2d 设置屏幕默认方向
      • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
      • Cocos2d-x 2.0 之 Actions “三板斧” 之一
      • cocos2d-x学习笔记(18)--游戏打包(windows平台)
      • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1