首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用P2JS检测相位器的冲击力

用P2JS检测相位器的冲击力
EN

Stack Overflow用户
提问于 2014-05-11 09:22:33
回答 2查看 1.3K关注 0票数 2

当使用P2JS物理引擎运行相位器时,我知道可以使用Phaser.Physics.P2.Body#onBeginContact检测冲突。但是,有没有一种方法可以测试碰撞的冲击力,这样当我的宇宙飞船与小行星相撞时,我就可以对它施加一个真实的损伤水平?

EN

回答 2

Stack Overflow用户

发布于 2015-01-27 21:21:30

您可以使用Phaser.Physics.P2.Body#onBeginContact确定影响的动量,如下所示:

创建您的ship并将onBeginContact信号处理程序添加到它的P2主体

代码语言:javascript
复制
ship.body.onBeginContact.add(contactHandler);

将向contactHandler事件发送4个参数:与之接触的主体、引起接触的主体的形状、接触主体的形状和接触方程式数据数组。

代码语言:javascript
复制
function contactHandler(body, shape1, shape2, equation) {

    //get the velocity of asteroid at point of contact
    var v = body.velocity.y;

    //and the asteroid's mass
    var m = body.mass;

    //calculate momentum
    var momentum = m*v;

    //momentum affects ship damage
    ship.damage(momentum);

}

请注意,在这个例子中,我只是使用小行星的垂直速度来计算动量。为了更准确的计算,使用船的速度和小行星的速度。如下所示:

代码语言:javascript
复制
var v1 = new Phaser.Point(ship.velocity.x, ship.velocity.y);
var v2 = new Phaser.Point(body.velocity.x, body.velocity.y);

// calculate difference 
var v = Math.abs( v1 - v2 );

下面是实际使用的代码:http://jsfiddle.net/bstevens/a6paycw6/

票数 2
EN

Stack Overflow用户

发布于 2014-07-25 01:47:27

我能想到的最简单的方法,就是把小行星物体的速度考虑在内。因此,如果小行星从屏幕的顶部落到飞船上,小行星y速度是大于200,增加了更多的伤害,那么你可以把y速度加到100。我不确定你游戏中的实际数字是多少,但我认为使用小行星速度的概念仍然成立。

-编辑--

假设你有一艘宇宙飞船和一颗小行星,它们发生了碰撞(在屏幕底部垂直与宇宙飞船相撞),现在你使用的方法将根据碰撞的严重程度减少宇宙飞船的健康,if语句将如下所示:

代码语言:javascript
复制
if(asteroid.body.velocity.y<100)
    spaceship.health-=10;
else if(asteroid.body.velocity.y<200)
    spaceship.health-=20;
else
    spaceship.health-=30;

(此外,为了使数字更真实,我更改了y速度值。我现在意识到,y速度为20实际上是相当慢的,100-300更有意义。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23587975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档