标签: phaser-framework

PhaserJS:为图形对象添加物理

大多数示例使用精灵来添加物理,但我想将物理添加到使用Graphics类创建的对象.例如:

var square = game.add.graphics( 0, 0 );
//some definitions

game.physics.arcade.enable( square );
Run Code Online (Sandbox Code Playgroud)

这根本不适用于图形,但它可以立即使用精灵.为什么这样,我怎么能实现这个目标?

提前致谢.

javascript game-engine game-physics phaser-framework

4
推荐指数
1
解决办法
2070
查看次数

扩展Phaser.js类

我正在使用Phaser框架,我想创建一个新的类,在phaser中保存sprite类的所有属性,所以我尝试这样做

var mario = function(){

    Phaser.Sprite.call(this); // inherit from sprite
};
Run Code Online (Sandbox Code Playgroud)

但是有一个错误"Uncaught TypeError:undefined is not a function"

然后我试过了

var mario = function(){

   this.anything = "";

};

mario.prototype = new Phaser.Sprite();
Run Code Online (Sandbox Code Playgroud)

确定它有效,但它调用了相位器构造函数,我不想创建精灵,直到我这样做 var heroObj = new mario();

我该怎么办 ?

javascript oop phaser-framework

4
推荐指数
2
解决办法
4042
查看次数

如何在phaser.js中向组sprite添加动画?

如何为已添加到组中的精灵设置动画?

这是我的spritesheet:

game.load.spritesheet('enemyBullet', 'assets/games/invaders/enemy-bullet.png', 11, 19);
Run Code Online (Sandbox Code Playgroud)

这是小组:

// The enemy's bullets
enemyBullets = game.add.group();
enemyBullets.enableBody = true;
enemyBullets.physicsBodyType = Phaser.Physics.ARCADE;
enemyBullets.createMultiple(30, 'enemyBullet');
enemyBullets.setAll('anchor.x', 0.5);
enemyBullets.setAll('anchor.y', 1);
enemyBullets.setAll('outOfBoundsKill', true);
enemyBullets.setAll('checkWorldBounds', true);
Run Code Online (Sandbox Code Playgroud)

这是我认为我应该添加的代码.

enemyBullets.animations.add('fly3', [ 0, 1, 2, 3], 20, true);
enemyBullets.play('fly3');
Run Code Online (Sandbox Code Playgroud)

但是,如果我在上面的组代码块中的任何地方添加它,我会收到错误'enemyBullets.animations'.undefined'.

有任何想法吗?

animation sprite phaser-framework

4
推荐指数
1
解决办法
1761
查看次数

Phaser.js在forEach循环中删除组中的对象

我要销毁某个对象,使其通过某个x值。这些对象是称为“球”的移相器组的一部分。在我的更新循环中,我有以下代码行:

balls.forEach(updateBalls, null, true);
Run Code Online (Sandbox Code Playgroud)

这是updateBalls函数:

function updateBalls(ball) {
  if (ball.x > 800) {
    ball.destroy();
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是在循环期间删除对象会弄乱循环,这是我得到的错误:

TypeError:this.children [i]未定义

我试图将每个球推到一个阵列,然后像这样破坏每个球。

function updateBalls(ball) {
  if (ball.x > 800) {
    ballsToDestroy.push(ball);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在更新循环中:

balls.forEach(updateBalls, null, true);
for (x = 0; x < ballsToDestroy.length; balls++) {
    ballsToDestroy[x].destroy();
}
Run Code Online (Sandbox Code Playgroud)

这给了我一些奇怪的错误。
如果我使用ball.kill(),它会起作用,但最终会导致游戏延迟,因为实际上并没有移除球。

我该如何解决?

javascript phaser-framework

4
推荐指数
1
解决办法
1013
查看次数

我可以使用Lance制作多人Phaser游戏吗?

如何使用现有的Phaser游戏并使其成为多人游戏?

我可以将Lance库用于此目的吗?两个库都控制着自己的游戏对象,所以我不知道如何在同一个游戏中一起使用这两个框架.

multiplayer phaser-framework lance

4
推荐指数
1
解决办法
1601
查看次数

阶段3:物质物理学检测碰撞

我正在尝试检测两个对象何时相互碰撞,但是我不确定该怎么做。

我有以下场景,该场景向场景中添加了两个物理图像。我只需要一种方法来检测两者何时发生碰撞。

export class MainGame extends Scene {
  public create() {
    // Create the player
    this.player = this.matter.add.image(300, 100, 'player')

    // Create a pillar
    let pillar = this.matter.add.image(500, 0, 'pillar1', null, { isStatic: true })

    // Somehow detect collision between the two...
  }
}
Run Code Online (Sandbox Code Playgroud)

我无法确定的是如何检测玩家何时撞到支柱。我所寻找的一切都是如何使用街机物理学来实现的,但是我正在使用物质物理学。

我找不到有关如何检测碰撞然后运行函数的任何信息。

javascript phaser-framework matterjs

4
推荐指数
1
解决办法
1765
查看次数

Phaser 3 es6:如何创建一个Player类?

我用es6语法搞乱了Phaser 3.在Phaser 3中,现在一切都由场景组成,您可以在其中加载/更新/等所有内容.因此,对于主要Game场景,我延伸Phaser.Scene.

export default class Game extends Phaser.Scene {
  preload()
  create()
  ...
Run Code Online (Sandbox Code Playgroud)

但是,假设我有一个播放器,它将涉及100行代码,我希望将其保存在单独的文件中以保证代码清洁.我该如何组织?

我发现的每个教程/信息都包含了同一文件中场景的所有代码,但对于完全充实的游戏来说,这显然是不现实的.我想将游戏的许多元素分成各自的类/文件.

那么,我只是创建了一个不扩展任何内容的播放器类?或者我应该通过类似的方式扩展它Phaser.Sprite

javascript phaser-framework

4
推荐指数
1
解决办法
3580
查看次数

如何在Phaser 3中使用本地字体?

我的fonts/目录中有一种字体。如何将其加载到游戏中,然后在游戏中的文本对象上使用它?在Phaser 3中,我找不到使用字体的任何东西。

phaser-framework

4
推荐指数
2
解决办法
2613
查看次数

Phaser 3中的outOfBoundsKill等效项

我已经使用了Phaser 2一段时间,但最近将其转换为Phaser 3,我想知道是否有一种方法或成员可能等效于'outOfBoundsKill'。我在Phaser 3中有一个Arc Object,并对其施加了重力,因此我想确保在超出画布范围时将其杀死或破坏。

有关outOfBoundsKill的更多信息:https ://phaser.io/docs/2.6.2/Phaser.Sprite.html#outOfBoundsKill

我已经尝试过此代码示例,但它没有破坏弧对象,“ ball”是弧对象。

ball.on('worldbounds', function() {
  if (!Over) {
    ball.destroy();

    HealthBar.livesLeft -= 1;
    HealthBar.cs.scale.x = HealthBar.livesLeft / HealthBar.lives;

    var shake = this.sound.add('shake');
    shake.play();
  }
}, this);
Run Code Online (Sandbox Code Playgroud)

javascript phaser-framework

4
推荐指数
1
解决办法
772
查看次数

如何在 Phaser 中使用 A、S、D、W 键?

我正在使用Phaser.io

我想使用A, S, D,W键。我知道你可以像这样使用箭头键:

create(){
  ...
  gameState.cursors = this.input.keyboard.createCursorKeys();
}

update(){
  if (gameState.cursors.left.isDown) {
    gameState.player1.setVelocityX(-160);
  } else if (gameState.cursors.right.isDown) {
    gameState.player1.setVelocityX(160);
  }
}
Run Code Online (Sandbox Code Playgroud)

我试图切换.left..A..right..D.,但它不工作。

有任何想法吗?

javascript phaser-framework

4
推荐指数
1
解决办法
1860
查看次数