有没有办法避免使用画布缩放信箱?

时间:2018-01-09 17:10:23

标签: javascript canvas pixi.js

我正在使用Pixi.js作为渲染引擎在Javascript中开展一个小项目。但是,我只发现了一些将画布缩放到完整窗口的方法,这些方法似乎最适合当前版本。但是,它有一个警告,因为它根据方向在侧面产生信箱。

Pixi可以避免使用信箱吗?

enter image description here

这是我到目前为止的代码,因为它与缩放有关:

var application = null;
var GAME_WIDTH = 1060;
var GAME_HEIGHT = 840;
var ratio = 0;
var stage = null;
application = new PIXI.Application(
{
    width: GAME_WIDTH,
    height: GAME_HEIGHT,
    backgroundColor: 0x00b4f7,
    view: document.getElementById("gwin")
});

stage = new PIXI.Container(true);

window.addEventListener("resize", rescaleClient);

function rescaleClient()
{
    ratio = Math.min(window.innerWidth / GAME_WIDTH, window.innerHeight / 
    GAME_HEIGHT);
    stage.scale.x = stage.scale.y = ratio;
    application.renderer.resize(Math.ceil(GAME_WIDTH * ratio), Math.ceil(GAME_HEIGHT * ratio));     
}

我的目标是为Agar.io/Slither.io实现类似的全屏/窗口效果,但是我还没有找到一种方便的方法。似乎有一些使用Pixi来实现这一目标的例子,但代码通常是封闭的源代码,并且它们似乎使用了Ionic和Phonegap等外部工具。

2 个答案:

答案 0 :(得分:1)

我终于找到了答案。我接近正确的轨道,但需要应用更多的东西。

application.renderer.view.style.position = "absolute";
application.renderer.view.style.display = "block";
application.renderer.autoResize = true;
application.renderer.resize(window.innerWidth, window.innerHeight);

这在内部设置了一些额外的东西,而对resize脚本进行了一些小修改......

ratio = Math.min(window.innerWidth / GAME_WIDTH, window.innerHeight / GAME_HEIGHT);
stage.scale.x = stage.scale.y = ratio;
renderer.resize(window.innerWidth, window.innerHeight); 

正确配置事物,以便相关的渲染器窗口现在填充屏幕而不会压缩内容。

这不容易被发现。如此多的教程只是在上半场留下它,并假设这是人们希望做的事情。

答案 1 :(得分:0)

var application;
//var GAME_WIDTH = window.screen.width-20;
var GAME_WIDTH = window.innerWidth;
//var GAME_WIDTH = document.body.clientWidth;
var GAME_HEIGHT = window.innerHeight;
var ratiox = 0;
var ratioy = 0;
var container;
application = new PIXI.Application(
{
    width: GAME_WIDTH,
    height: GAME_HEIGHT,
    backgroundColor: 0x00b4f7,
    view: document.getElementById("gwin")
});
//document.body.appendChild(application.view);
container = new PIXI.Container(true);
application.stage.addChild(container);

window.addEventListener("resize", rescaleClient);

function rescaleClient()
{
    //ratiox = Math.min(window.innerWidth / GAME_WIDTH, window.innerHeight /     GAME_HEIGHT);
    application.stage.scale.x = ratiox = window.innerWidth / GAME_WIDTH
	application.stage.scale.y = ratioy = window.innerHeight / GAME_HEIGHT;
    application.renderer.resize(Math.ceil(GAME_WIDTH * ratiox), Math.ceil(GAME_HEIGHT * ratioy));     
}
@viewport{
  width:device-width
}

body {
padding :0px;
margin:0px
}
<script src="https://pixijs.download/v4.6.2/pixi.min.js"></script>
<canvas id="gwin"></canvas>