Phaser:制作背景屏幕宽度而不是内容宽度

时间:2015-01-30 00:10:05

标签: android phaser-framework

我正在使用Phaser Framework for Android制作游戏。我需要让画布填充整个屏幕宽度,然后用背景颜色填充它,然后将内容放在屏幕的中心。目前,即使我已经将画布的宽度设置为窗口宽度,Phaser仍将其重置为内容宽度,该宽度较小,然后仅使用背景填充内容宽度。

如何阻止Phaser使用内容宽度?

var gameObj = new Phaser.Game($(".parent").width(), 700, Phaser.CANVAS, 'parent');

gameObj.stage.backgroundColor = '#A6E5F5';
gameObj.load.image('prld', 'prl.png');

gameObj.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
gameObj.scale.pageAlignHorizontally = true;
gameObj.scale.pageAlignVertically = true;
gameObj.scale.setScreenSize(true);
gameObj.scale.refresh();

gameObj.stage.backgroundColor = '#A6E5F5';    

// Load Content Here
gameObj.load.image('h1', 'res1/h1.png');
gameObj.load.image('h2', 'res1/h2.png');
....
g = gameObj.add.group();
g.create(20, 20, 'h1');
g.create(60, 20, 'h2');
....

2 个答案:

答案 0 :(得分:8)

您需要Phaser 2.2+,但如果您希望画布填满整个屏幕空间,您可以这样做:

var game = new Phaser.Game("100%", "100%", Phaser.CANVAS, 'parent');

...

game.scale.scaleMode = Phaser.ScaleManager.RESIZE;

如果您使用100%尺寸,也不应使用pageAlign。您也不需要调用refresh或setScreenSize。

在调整比例模式下工作时,您可以向状态添加一个名为“调整大小”的函数。只要屏幕尺寸发生变化(可能是方向事件),就会调用它,并传递2个参数:宽度和高度。使用它们来调整游戏内容布局。

你可能想得到Phaser Scale Manager book,它更详细地涵盖所有这些(警告:我写了它,但它有一个"付你想要的东西"价格,包括完全免费)

答案 1 :(得分:6)

我在游戏中使用此代码,并且在不改变任何元素位置的情况下工作非常好

var targetWidth = 720; // the width of the game we want
var targetHeight = 480; // the height of the game we want

// additional ratios

//Small – 360x240
//Normal – 480x320
//Large – 720x480
//XLarge – 960x640
//XXLarge – 1440x960

var deviceRatio = (window.innerWidth/window.innerHeight); //device aspect ratio

var newRatio = (targetHeight/targetWidth)*deviceRatio; //new ratio to fit the screen

var newWidth = targetWidth*newRatio;
var newHeight = targetHeight;

var gameWidth = newWidth;
var gameHeight = newHeight;
var gameRendrer = Phaser.AUTO;

此引导状态的代码

game.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;

        game.scale.pageAlignHorizontally = true;
        game.scale.pageAlignVertically = true;
        game.scale.forceLandscape = true;
        game.scale.setScreenSize(true);

这适用于横向模式,如果您想要将其设置为纵向更改宽度和高度,如

var targetWidth = 480; // the width of the game we want
var targetHeight = 720; // the height of the game we want

也强迫它成为肖像

此代码在我的游戏中运行良好 phaser screen shots

enter image description here