当前位置:编程学习 > wap >>

cocos2d-html5- v2.0 等比缩放

最近比较忙,好久没看过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。。。

 


 

补充:移动开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,