我是 JS/phaser 的新手,只需创建一个Phaser.Gamewith
var game = new Phaser.Game(600, 490);
Run Code Online (Sandbox Code Playgroud)
游戏是在左上角创建的,但我想将其放置在浏览器的中央。
我检查了API,没有发现任何相关内容:
new Game(width, height, renderer, parent, state, transparent, antialias, physicsConfig)
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我该怎么做吗?
我目前正在phaser.js框架中开发一个小游戏,由于项目范围相当大,我真的很想进行单元测试。然而,当尝试在 Jasmine 中为 Phaser 设置单元测试时,我遇到了有关依赖项的错误。
我对 Jasmine 或任何其他测试框架没有经验,所以我可能忽略了对经验丰富的开发人员来说显而易见的事情。
我的 .spec 文件如下所示:
describe("motorMain", function() {
var Phaser = require('../phaser');
var MotorMain = require("../motorMain");
var motorMain;
var phaser;
beforeEach(function() {
phaser = new Phaser();
motorMain = new motorMain();
});
it("should increase the score if a object is clicked", function(){
var scoreBeforeClicking = motorMain.score;
var gameobject;
motorMain.clickhandler("",gameobject);
expect(scoreBeforeClicking+1).toEqual(score);
})
});
Run Code Online (Sandbox Code Playgroud)
但由于 Phaser 依赖于在浏览器中运行,当我运行它时,它抱怨无法访问Phaser 中的window和 等元素。document
我收到如下错误:
ReferenceError:文档未定义
有人有测试 Phaser 游戏的经验吗?我在网上似乎找不到任何有关它的信息。甚至可以测试移相游戏吗?
至于其他测试框架,我也研究过 nightwatch,但它的 Phaser 支持已经过时,而且它主要是 e2e 而不是单元测试,所以它不是我想要的。我还在网上看到有人开发了Phaser 2.4.7的shimming版本,但是现在已经过时了,Phaser 3已经发生了很大的变化。
点击按钮后如何重新启动游戏?我尝试了以下代码:
this.scene.stop();
this.scene.start();
Run Code Online (Sandbox Code Playgroud)
场景重新加载,但预加载功能不再起作用。
我有一个网页,我希望能够连续运行三个 JavaScript 游戏。我开始一个
//jQuery to start a game
$(document).ready(() => {
//When the logo image is clicked
$("#logo").click(() => {
//Get the archery game
$.getScript('archery.js', () => {
//Start it
startArchGame();
//Remove the image from the HTML doc
$("#logo").remove();
});
})
})
Run Code Online (Sandbox Code Playgroud)
然后,在内部archery.js,一旦满足条件,就会执行以下代码
$.getScript('skateboarding.js', () => {
startSkateGame();
});
game.destroy();
Run Code Online (Sandbox Code Playgroud)
这game.destroy();会阻止游戏在 Phaser 3 中运行,但下一个游戏只是在第一个游戏下方加载,因此您看不到它。我怎样才能解决这个问题?是否可以完全删除我得到的第一个脚本?
使用鼠标滚轮放大和缩小似乎有效。不过我想在混合中放置鼠标位置。
如果用户放大,相机会(最好是缓慢地,但也可以立即工作)随着放大或缩小而向鼠标位置移动。换句话说,在缩放时,相机应以当前鼠标 x,y 坐标为中心或至少转向它。
相机 x,y 不等于画布 x,y 吗?它似乎朝相反的方向平移。我已经在我的 [Typescript]方法中尝试了pan()和:centerOn()create()
this.input.on("wheel", (pointer, gameObjects, deltaX, deltaY, deltaZ) => {
if (deltaY > 0) {
this.camera.zoom -= .1;
}
if (deltaY < 0) {
this.camera.zoom += .1;
}
this.camera.pan(pointer.x, point.y, 2000, "Power2");
//this.camera.centerOn(pointer.x, pointer.y);
});
Run Code Online (Sandbox Code Playgroud)
这是一个不太可能的方案,但我想模仿游戏《遥远的世界》中的缩放行为。
在我的 Phaser 游戏中,我想使用类似细胞的背景纹理,当你移动时它也会移动。
我的想法是将每个单元格添加到 for 循环中,如下所示:
let width=100, height=100;
for(let y=0;y<width;y++){
;
for(let x=0; x<height;x++){
this.physics.add.image(width/2+64*x, height/2+64*y, "snow_field").setScale(4,4);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:游戏变得非常(非常)慢
那么有没有更好/推荐的方法来添加重复图像/背景?
我已经搜索了整个文件,实际上我已经下载并手动搜索了.我找到的只是过滤方法,它允许你使用你必须编写的webgl shadders.
我想要的是一种混合,就像你在photoshop中看到的光混合层等.
在互联网上,我在pixijs中找到了一些例子,并在半年前谈到支持它.所以请一直关注phaserjs并了解filter/blendMode的人请告诉我.
我有谷歌它,我知道添加z-index的正确方法是按创建顺序,但我有不同的情况.
我正在创建纸牌游戏,我想在点击时移动卡片,之后该卡片应该在顶部,这是不可能的,所以我已经按照以下方式解决了.
在卡片上点击的功能我正在销毁那张卡片并创建相同的新卡片,因为它是最后创建的.
还有另一种解决这种情况的方法吗?
谢谢
假设我只是添加了一个简单的小图像:
var image = scene.add.image(200,200,'simple-little-image.png');
Run Code Online (Sandbox Code Playgroud)
然后,我想破坏它。不仅隐藏它,还删除所有数据和所有内容。
我检查了文档,图像类没有任何种类kill或destroy功能。但是,它具有ignoreDestory布尔值。这使我认为scene必须删除它?但是我找不到在scene类docs中删除图像的方法。
通过scene控制台中的类,我找不到要删除图像的子类的任何功能。
那么,如何删除图像及其所有数据?
在Phaser 3文档中,我可以看到Sprite和之间的最大区别Image是您不能为设置动画或向其添加物理物体Image,但是在Image属性中可以看到animationManager。我对此有些困惑。谁能澄清一下?