2016-05-31 3 views
5

Wie man eine Reibung in einem Phaser.P2.body anwendet? In einem Air-Hockey-Phaser-basierten Spiel. Wie „Ausschaltzeiten den Luftstrom“ von Hockey-Tisch,Wie man "Luft" Reibung in einem Phaser P2 Körper anwendet?

In diesem Beispiel: 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'); 

Dies ist ein sehr gutes und realistisches Beispiel, wenn die Tabelle an ist .. aber. Wenn der Tisch ausgeschaltet ist ?? Die Puc sollte sich langsamer bewegen und sollte einen kürzeren Stopp haben. Ich möchte das simulieren. Vorstellen, dass der gelbe Kreis der Airhockey-Puck ist und der schwarze Hintergrund einer dieser belüfteten Tische ist. Wie stellt man eine Reibungskraft zwischen Puc und Tisch ein?

P2 docs scheint viele Dinge im Zusammenhang mit Kollisionen und Kontakte mit den Rändern des Körpers und Materialien zu haben ... aber wie Reibung mit der "Luft" zu simulieren? oder das "Wasser" wenn dieser Körper schwimmt .. oder eine Reibung mit Puck und Tisch?

Ps. Der Versuch, P2.body.velocity.x und y in update() zu degradieren, fördert das seltsame Verhalten bei der Weiterleitung.

+1

Beachten Sie, dass es per Drag genannt, und es ist in der Regel eine Gegenkraft. Sie müssen möglicherweise Ihren eigenen Modifikator dafür rollen. Beachten Sie, dass der Widerstand normalerweise mit dem Quadrat der Geschwindigkeit übereinstimmt. Wenn die Geschwindigkeit also relativ klein ist, ist der Widerstand niedrig. Wenn der Widerstand konstant ist, reduziert er nur die Geschwindigkeit um einen konstanten Betrag und wäre genauso, als würde er ihn einfach verlangsamen. Also, sollten Sie überlegen, ob es überhaupt zählt, wenn Sie echte Physik simulieren. – AbstractDissonance

Antwort

6

Sie suchen nach Phaser P2 damping property, die Drag in einen Physikkörper einführt.

Fügen Sie diese auf Ihrem Körper und der Puck zum Stillstand kommt sehr schnell, als ob die Luft ausgeschaltet wurde:

spriteCircle.body.damping = 0.9; 

Dämpfung gibt den Anteil der Geschwindigkeit pro Sekunde verloren, und gültige Werte sind in der Bereich 0 bis 1.

JSFiddle mit Dämpfung Aktualisiert: http://jsfiddle.net/Lucgmptn/