set visible = true在Phaser

时间:2016-07-30 02:40:08

标签: javascript phaser-framework

我正在制作类似于传统魔法塔的游戏,现在我在处理怪物和勇士之间的战斗时遇到了问题。

这是我在update()中的代码:

function update(){
   // ...
   game.physics.arcade.collide(braver, monsters, battle, null, this);
   // ...
}

这是我的战斗():

function battle(player, monster) {
    var x = (player.attack > monster.defence ? player.attack - monster.defence : 0);
    var y = (monster.attack > player.defence ? monster.attack - player.defence : 0);
    battleScene.visible = true;
    while (1) {
        if (Date.now() > battleTimer) 
        {
            battleTimer = Date.now() + 1000;
            monster.health -= x;
            if (monster.health <= 0) {
                monster.kill();
                player.gold += monster.gold;
                player.exp += monster.exp;
                break;
            }
            player.health -= y;
            if (player.health <= 0) {
                player.kill();
                break;
            }
        }
    }
    battleScene.visible = false;
}

battleScene是一个群体,战斗盒。令我疯狂的是,battleScene根本没有在屏幕上显示(即使使用battleScene.visible = true)。

我已经尝试了game.world.bringToTop(battleScene);,但它也无效。那么我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

battleScene是什么类型的对象?如果它是Phaser.State你需要以状态Manager (Documentation)开始该状态

game.state.start('battle_scene_key')

如果它是Phaser.Sprite,您需要将其添加到游戏世界才能进行绘制。

// assuming `this` is a Phaser.State
state.add.existing(battleScene)