2014-09-20 13 views
6

Sto lavorando a un nuovo gioco utilizzando la libreria PhaserJS per HTML5 e sono in perdita con un problema che ho incontrato. Sto usando il motore fisico P2 per la fisica di base della piattaforma e non sono in grado di far funzionare la collisione dei limiti del mondo. Ecco il mio codice:Come aggiungere collisione mondiale di base con PhaserJS?

Game.js

function create() { 
    game.world.setBounds(0, 0, 800, 300); 
    game.physics.startSystem(Phaser.Physics.P2JS); 
    game.physics.p2.restitution = 0.8; 

    player.create(game); 
    player.instance.body.collideWorldBounds = true; 
} 

Player.js

Player.prototype.create = function(game) { 
    this.instance = game.add.sprite(100, 100, 'player'); 
    game.physics.p2.enable(this.instance, Phaser.Physics.P2JS); 

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

In questo momento la mia comprensione è che ho bisogno di impostare i limiti mondo chiamando "game.world.setBounds (larghezza, altezza) "e quindi controlla i limiti chiamando" player.instance.body.collideWorldBounds = true; ", ma lo sprite del giocatore sta ancora andando oltre i limiti. Qualsiasi aiuto è molto apprezzato. Grazie!

MODIFICA: sto usando PhaserJS 2.0.7.

risposta

6

si potrebbe desiderare di aggiornare Phaser 2.1.1, poiché sembra che abbiano risolto questo problema.

Si può vedere che da this example.

Ecco il codice sorgente per questo esempio:

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update }); 

function preload() { 

    game.load.image('stars', 'assets/misc/starfield.jpg'); 
    game.load.spritesheet('ship', 'assets/sprites/humstar.png', 32, 32); 

} 

var ship; 
var starfield; 
var cursors; 

function create() { 

    starfield = game.add.tileSprite(0, 0, 800, 600, 'stars'); 

    game.physics.startSystem(Phaser.Physics.P2JS); 

    game.physics.p2.restitution = 0.8; 

    ship = game.add.sprite(200, 200, 'ship'); 
    ship.scale.set(2); 
    ship.smoothed = false; 
    ship.animations.add('fly', [0,1,2,3,4,5], 10, true); 
    ship.play('fly'); 

    // Create our physics body. A circle assigned the playerCollisionGroup 
    game.physics.p2.enable(ship); 

    ship.body.setCircle(28); 

    // This boolean controls if the player should collide with the world bounds or not 
    ship.body.collideWorldBounds = true; 

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

} 

function update() { 

    ship.body.setZeroVelocity(); 

    if (cursors.left.isDown) 
    { 
     ship.body.moveLeft(200); 
    } 
    else if (cursors.right.isDown) 
    { 
     ship.body.moveRight(200); 
    } 

    if (cursors.up.isDown) 
    { 
     ship.body.moveUp(200); 
    } 
    else if (cursors.down.isDown) 
    { 
     ship.body.moveDown(200); 
    } 

} 
+0

Potrebbe essere possibile che la versione 2.0.7 mi stia causando alcuni problemi, e non ero a conoscenza di una versione più recente, onestamente. Ci proverò stasera e ti faccio sapere se funziona per me. Grazie per la tua risposta. – hRdCoder

+0

Ok, fantastico. Spero che questo funzioni per te. – GDP2

+0

Ha funzionato! Grazie mille @Ylluminarious. :) – hRdCoder

3

nel mio gioco ho dovuto chiamare p2.setBoundsToWorld per aggiornare i limiti p2 fisica per soddisfare i limiti mondo:

function create() { 
    game.world.setBounds(0, 0, 800, 300); 
    game.physics.startSystem(Phaser.Physics.P2JS); 
    game.physics.p2.setBoundsToWorld(true, true, true, true, false); 

La firma è la seguente:

setBoundsToWorld: function (left, right, top, bottom, setCollisionGroup) 
+0

Non ero a conoscenza di questo metodo, in realtà. Farò un tentativo stasera e vedrò se ottengo qualche risultato. Grazie per la tua risposta. – hRdCoder