2016-05-31 25 views
5

Come applicare un attrito in un corpo Phaser.P2.body? In un gioco basato sul phaser Air-Hockey. Come "turn-off il flusso d'aria" da hockey da tavolo,Come applicare l'attrito "aria" in un corpo Phaser P2?

In questo esempio:? http://jsfiddle.net/ywzmkso3/32/

// Initialize Phaser, and creates a 400x490px game 
var game = new Phaser.Game(400, 400, Phaser.CANVAS, 'game_div'); 
var game_state = {}; 

// Creates a new 'main' state that wil contain the game 
game_state.main = function() { }; 
game_state.main.prototype = { 

preload: function() { 
    // Function called first to load all the assets 
}, 

create: function() { 
    game.physics.startSystem(Phaser.Physics.P2JS); 
    game.physics.p2.restitution = 0.7; 

    //start drawing a circle 
    var graphics = game.add.graphics(0, 0); 
    graphics.beginFill(0xFF3300); 
    graphics.lineStyle(0); 
    graphics.beginFill(0xFFFF0B); 
    graphics.drawCircle(100, 100, 40); 
    graphics.endFill(); 
    //creating an sprite from draw 
    var spriteCircle = game.add.sprite(100, 300, graphics.generateTexture()); 
    // And destroy the original graphics object 
    graphics.destroy(); 
    spriteCircle.anchor.set(0.5); 
    game.physics.p2.enable([ spriteCircle ], false); 
    spriteCircle.body.setCircle(20);// 20 radius 

    spriteCircle.body.mass = 1; 
    spriteCircle.body.debug = true; 
    //give some initial velocity 
    spriteCircle.body.velocity.x = 10000 
    spriteCircle.body.velocity.y = 19999 



}, 

update: function() { 

}, 
}; 

// Add and start the 'main' state to start the game 
game.state.add('main', game_state.main); 
game.state.start('main'); 

Questo è un esempio molto buono e realistico se la tabella è sul .. ma. se il tavolo è spento ?? Il puc dovrebbe muoversi più lentamente e dovrebbe avere un arresto più breve. Voglio simularlo. Immaginando che il cerchio giallo sia il disco da airhockey e lo sfondo nero sia uno di quei tavoli aerati. Come impostare una forza di attrito tra puc e table?

P2 doc sembra avere un sacco di cose relative a collisioni e contatti con i bordi del corpo e dei materiali ... ma come simulare l'attrito con l'aria? o "l'acqua" se questo corpo sta nuotando .. o un attrito con disco e tavolo?

Ps. provare a degradare P2.body.velocity.xe y in update() promuove il comportamento di deviazioni.

+1

noti che si chiama resistenza e di solito è una forza contromisure. Potrebbe essere necessario eseguire il rollover del proprio modificatore. Nota che la resistenza di solito va con il quadrato della velocità, quindi se la velocità è relativamente piccola allora la resistenza sarà bassa. Inoltre, se la resistenza è costante, ridurrà la velocità solo di una quantità costante e sarà la stessa di un semplice rallentamento. Quindi, dovresti considerare se è importante anche se tu simuli la fisica reale. – AbstractDissonance

risposta

6

Siete alla ricerca di Phaser P2 damping property, che introduce il trascinamento su un corpo fisico.

Aggiungi questo al vostro corpo e il disco si ferma molto rapidamente, come se l'aria è stato spento:

spriteCircle.body.damping = 0.9; 

Damping specifica la percentuale della velocità perduta ogni secondo, e valori validi sono in la gamma 0 a 1.

Aggiornato JSFiddle con smorzamento: http://jsfiddle.net/Lucgmptn/