所以基本上,我想创建一个平台游戏或迷宫游戏(是的,非常基本的,因为我还在学习,反正不会有很多东西)。
我想要多个.js文件,每个文件处理不同的任务,例如:
到目前为止我得到的是基本游戏(目前仍在main.js中)
var mainState = {
preload: function() {
game.load.image("player", "assets/player.png");
game.load.image("wall", "assets/wall.png");
game.load.image("coin", "assets/coin.png");
game.load.image("enemy", "assets/lava.png");
},
create: function() {
game.stage.backgroundColor = "#3598db";
game.physics.startSystem(Phaser.Physics.ARCADE);
game.world.enableBody = true;
this.player = game.add.sprite(150, 50, "player");
this.walls = game.add.group();
this.coins = game.add.group();
this.enemies = game.add.group();
var level = [
"xxxxxxxxxxxxxxxx",
"x x x x x",
"x xxx xx xxx x",
"x xx xxx x x",
"x x xx x x",
"xx x x x xxx x",
"x x x! xx",
"xxxxxxxxxxxxxxxx",
]
for(var i = 0; i < level.length; i++) {
for(var j = 0; j < level[i].length; j++) {
if(level[i][j] == "x") {
var wall = game.add.sprite(50*j, 50*i, "wall");
this.walls.add(wall);
wall.body.immovable = true;
}
else if(level[i][j] == "o") {
var coin = game.add.sprite(50*j, 50*i, "coin");
this.coins.add(coin);
}
else if(level[i][j] == "!") {
var enemy = game.add.sprite(50*j, 50*i, "enemy");
this.enemies.add(enemy);
}
}
}
cursors = game.input.keyboard.createCursorKeys();
},
update: function() {
this.player.body.velocity.y = 0;
this.player.body.velocity.x = 0;
if (cursors.left.isDown) {
this.player.body.velocity.x = -200;
}
if (cursors.right.isDown) {
this.player.body.velocity.x = +200;
}
if (cursors.up.isDown) {
this.player.body.velocity.y = -200;
}
if (cursors.down.isDown) {
this.player.body.velocity.y = 200;
}
game.physics.arcade.collide(this.player, this.walls);
game.physics.arcade.overlap(this.player, this.coins, this.takeCoins, null, this);
game.physics.arcade.overlap(this.player, this.enemies, this.changeStage, null, this);
},
changeStage: function() {
game.state.start("main"); //Swap to Level 2
console.log("u win!");
},
};
var game = new Phaser.Game(800, 400);
game.state.add("main", mainState);
game.state.start("main");
&#13;
目前编码为&#34;迷宫&#34;风格游戏,在它是平台游戏之前,这就是为什么可能是一些未使用的代码。 现在,问题是,我不知道如何使用多个.js文件并在Phaser中更改阶段。 我希望我写的所有内容都是可以理解的,如果没有,请随意提出,我会尽力解释! :)
提前谢谢。
答案 0 :(得分:0)
首先,您需要为每个http
创建js
个文件。这些文件将遵循与states
相同的模式,即每个文件都有自己的mainState
,preload
和create
方法。
然后在update
结束时,您将所有这些mainState
添加到游戏中(考虑到您的游戏状态文件的名称为states
,level1.js
,{ {1}})
level2.js
但在您的游戏可以访问这些文件之前,您必须将它们包含在winLose.js
文件中。只需在var game = new Phaser.Game(800, 400);
game.state.add("main", mainState);
game.state.add("level1", level1);
game.state.add("level2", level2);
game.state.add("winlose", winLose);
game.state.start("main");
文件
index.html
请记住,您的状态必须在mainState之前添加,以便Phaser可以加载它们。
要更改状态,您只需使用
即可mainState.js
答案 1 :(得分:0)
对于基于关卡的游戏,我不建议为每个级别使用单独的.js文件。如果你的游戏中的每个状态基本相同,除了关卡布局,并且大部分是相同的复制和粘贴代码,那么这不是一个好兆头。
更好的方法是,您可以在单独的.js或.json文件中声明每个级别的级别布局和其他变量,如下所示:
iptables -C
然后您可以拥有一个var MyLevelData = [
{
title: "First level",
timelimit: 100,
layout: [
"xxxxxxxxxxxxxxxx",
"x x x x x",
"x xxx xx xxx x",
"x xx xxx x x",
"x x xx x x",
"xx x x x xxx x",
"x x x! xx",
"xxxxxxxxxxxxxxxx"
]
},
{
title: "The second challenge",
timelimit: 80,
layout: [
"etc.",
"etc."
]
}
]
状态,并为级别nr添加变量。这种状态基本上是主要的游戏循环。
levelstate.js
你可以添加一个按钮进入下一个级别,调用类似这个功能
var LevelState = {
levelindex: 0, // <- which level currently playing
create: function() {
var level = MyLevelData[this.levelindex].layout;
//etc.
有关详细信息,请参阅this post on the Phaser forums