Sign in to follow this  
Pilokio

Phaser 2 Level switching

Recommended Posts

Hi all,

I have made a game where once the player reaches the end of it a new level should start but I'm not sure how to do this? I have set up multiple states such as a boot, load, game, main menu and the actual game. Is it possible to set up a state so that will switch to level 2 once the goal is reached? Here is my code for reference, any help is appreciated :

(the win state takes the player to a menu that congratulates them, this is where I want the player to press a key and the next level can be loaded)

//this game will have only 1 state
var music;
var score = 0;
var scoreString = '';
var scoreText;
var playState = {

        //initiate game settings
        init: function () {
            //adapt to screen size, fit all the game
            this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
            this.scale.pageAlignHorizontally = true;
            this.scale.pageAlignVertically = true;

            this.game.physics.startSystem(Phaser.Physics.ARCADE);
            this.game.physics.arcade.gravity.y = 1000;

            this.cursors = this.game.input.keyboard.createCursorKeys();

            this.game.world.setBounds(0, 0, 360, 700);

            this.RUNNING_SPEED = 180;
            this.JUMPING_SPEED = 550;
        },

        //executed after everything is loaded
        create: function () {

            this.sfx ={
            jump : this.add.audio('jump'),
                coin: this.game.add.audio('coin')
            };


            music = game.add.audio('lvl1');
            music.play();

            //Score
            scoreString = 'Score : ';
            scoreText = game.add.text(175, 55, scoreString + score, { font: '34px Arial', fill: '#fff' });
            scoreText.fixedToCamera = true;


            this.ground = this.add.sprite(0, 638, 'ground');
            this.game.physics.arcade.enable(this.ground);
            this.ground.body.allowGravity = false;
            this.ground.body.immovable = true;

            //Parse the file
            this.levelData = JSON.parse(this.game.cache.getText('level1'));

            this.platforms = this.add.group();
            this.platforms.enableBody = true;

            this.levelData.platformData.forEach(function (element) {
                this.platforms.create(element.x, element.y, 'platform')
            }, this);

            this.platforms.setAll('body.immovable', true);
            this.platforms.setAll('body.allowGravity', false);

            //fires
            this.fires = this.add.group();
            this.fires.enableBody = true;

            var fire;
            this.levelData.fireData.forEach(function (element) {
                fire = this.fires.create(element.x, element.y, 'fire');
                fire.animations.add('fire', [0, 1], 4, true);
                fire.play('fire');
            }, this);

            this.fires.setAll('body.allowGravity', false);

            //coins
            this.coins = this.add.group();
            this.coins.enableBody = true;

            var coin;
            this.levelData.coinData.forEach(function (element) {
                coin = this.coins.create(element.x, element.y, 'coin');
                coin.animations.add('coin', [0, 1, 2, 3], 8, true);
                coin.play('coin');
            }, this);

            this.coins.setAll('body.allowGravity', false);

            //goal
            this.goal = this.add.sprite(this.levelData.goal.x, this.levelData.goal.y, 'goal');
            this.game.physics.arcade.enable(this.goal);
            this.goal.body.allowGravity = false;


            //create player
            this.player = this.add.sprite(10, 545, 'player', 3);
            this.player.anchor.setTo(0.5);
            this.player.animations.add('walking', [0, 1, 2, 1], 6, true);
            this.game.physics.arcade.enable(this.player);
            this.player.body.collideWorldBounds = true;


            this.game.camera.follow(this.player);

            this.barrels = this.add.group();
            this.barrels.enableBody = true;

            this.createBarrel();
            this.barrelCreator = this.game.time.events.loop(Phaser.Timer.SECOND * this.levelData.barrelFrequency, this.createBarrel, this);
        },

        update: function () {


            scoreText.bringToTop();

            this.game.physics.arcade.collide(this.player, this.ground);
            this.game.physics.arcade.collide(this.player, this.platforms);

            this.game.physics.arcade.collide(this.barrels, this.ground);
            this.game.physics.arcade.collide(this.barrels, this.platforms);


            this.game.physics.arcade.overlap(this.player, this.coins, this.collectCoin,null,this);
            this.game.physics.arcade.overlap(this.player, this.fires, this.killPlayer);
            this.game.physics.arcade.overlap(this.player, this.barrels, this.killPlayer);
            this.game.physics.arcade.overlap(this.player, this.goal, this.win);

            this.player.body.velocity.x = 0;

            if (this.cursors.left.isDown) {
                this.player.body.velocity.x = -this.RUNNING_SPEED;
                this.player.scale.setTo(1, 1);
                this.player.play('walking');
            }
            else if (this.cursors.right.isDown) {
                this.player.body.velocity.x = this.RUNNING_SPEED;
                this.player.scale.setTo(-1, 1);
                this.player.play('walking')
            }
            else {
                this.player.animations.stop();
                this.player.frame = 3;
            }

            if (this.cursors.up.isDown && this.player.body.touching.down) {
                this.sfx.jump.play();
                this.player.body.velocity.y = -this.JUMPING_SPEED;
            }

            this.barrels.forEach(function (element) {
                if (element.x < 10 && element.y > 600) {
                    element.kill();
                }

            })
        },

    collectCoin:function(player, coin){
        //  Increase the score
        score += 20;
        scoreText.text = scoreString + score;
        this.sfx.coin.play();
            coin.kill();
    },

        killPlayer: function (player, fire) {
            score = 0;
            music.stop();
            game.state.start('die');

        },

        win: function (player, goal) {
            game.state.start('won');
            music.stop();
        },

        createBarrel: function () {
            //Give me the first dead sprite
            var barrel = this.barrels.getFirstExists(false);

            if (!barrel) {
                barrel = this.barrels.create(0, 0, 'barrel');
            }

            barrel.body.collideWorldBounds = true;
            barrel.body.bounce.set(1, 0);

            barrel.reset(this.levelData.goal.x, this.levelData.goal.y);
            barrel.body.velocity.x = this.levelData.barrelSpeed;
        }
    };

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.