2016-05-31 26 views
5

Làm thế nào để áp dụng ma sát trong Phaser.P2.body? Trong trò chơi dựa trên Phaser Air-Hockey. Làm thế nào để "turn-off không khí dòng chảy" từ bảng hockey,Làm thế nào để áp dụng ma sát "không khí" trong Phaser P2 Body?

Trong ví dụ này: 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'); 

Đây là một ví dụ rất tốt và thực tế nếu bảng là trên .. nhưng. nếu bàn tắt? Puc nên di chuyển chậm hơn và nên dừng ngắn hơn. Tôi muốn mô phỏng điều đó. Đang tưởng tượng rằng vòng tròn màu vàng là quả bóng airhockey và nền đen là một trong những bảng có ga. Làm thế nào để thiết lập một lực ma sát giữa puc và bảng?

Tài liệu P2 dường như có rất nhiều thứ liên quan đến va chạm và tiếp xúc với các cạnh của cơ thể và Vật liệu ... nhưng làm thế nào để mô phỏng ma sát với "không khí"? hoặc "nước" nếu cơ thể này đang bơi .. hoặc một ma sát với puck và bàn?

Ps. cố gắng làm giảm P2.body.velocity.x và y trong bản cập nhật() thúc đẩy hành vi định tuyến lại lạ.

+1

Lưu ý rằng nó được gọi là kéo và nó thường là một lực phản tác dụng. Bạn có thể phải cuộn công cụ sửa đổi của riêng bạn cho nó. Lưu ý rằng kéo thường đi với bình phương của vận tốc, vì vậy nếu vận tốc là tương đối nhỏ thì kéo sẽ thấp. Ngoài ra, nếu kéo là hằng số thì nó sẽ chỉ giảm vận tốc một lượng không đổi và sẽ giống như việc làm chậm nó xuống. Vì vậy, bạn nên xem xét nếu nó thậm chí còn quan trọng nếu bạn mô phỏng vật lý thực. – AbstractDissonance

Trả lời

6

Bạn đang tìm kiếm của Phaser P2 damping property, trong đó giới thiệu kéo đến một cơ thể vật lý.

Thêm phần này vào cơ thể của bạn và puck đến một điểm dừng rất nhanh, như thể không khí đã được tắt:

spriteCircle.body.damping = 0.9; 

Damping quy định cụ thể tỷ lệ vận tốc bị mất mỗi giây, và các giá trị hợp lệ là trong phạm vi 0 đến 1.

Cập nhật JSFiddle với giảm xóc: http://jsfiddle.net/Lucgmptn/

Các vấn đề liên quan