gpt4 book ai didi

aframe - 如何在框架和 cannon.js 中创建 Spring

转载 作者:行者123 更新时间:2023-12-05 06:31:47 27 4
gpt4 key购买 nike

我正在尝试制作一个类似绳索的约束,其中的约束就像一个弹回的 Spring 。

我正在尝试使用约束组件:

<a-box id="other-box" dynamic-body />
<a-box constraint="target: #other-box;" dynamic-body />

但它似乎适用于固定距离。我怎样才能制作 Spring ?

最佳答案

大炮.js

Cannon.js有自己的Spring .它具有三个基本选项的构造函数如下所示:

new CANNON.Spring(bodyA, bodyB, {  // bodies attached to the spring
restLength: 2, // spring length when no force applied
stiffness: 50, // how much can it stretch
damping: 1, // how much will it suppress the force
});

在物理计算的每一步中,还需要将 Spring 力应用于附加物体:

world.addEventListener("postStep", function(event) {
spring.applyForce();
});

还有更多选项,请务必在 docs 中查看它们并进行一些实验!


框架

如何与框架一起使用?当使用 a-frame physics system 时,您可以使用 cannon.js .

您可以创建一个 aframe 组件,它将创建 Spring 。确保加载了 physics 主体:

AFRAME.registerComponent("spring", {
schema: {
target: {
type: 'selector'
}
},
init: function() {
let data = this.data
let el = this.el
if (this.el.body) {
// check whether we can access the physics body
this.createSpring()
} else {
// or wait until it's loaded
this.el.addEventListener("body-loaded", () => {
this.createSpring()
})
}
},
createSpring: function() {
let data = this.data
let cannonWorld = this.el.sceneEl.systems.physics.driver.world
var spring = new CANNON.Spring(this.el.body, data.target.body, {
restLength: data.restLength,
stiffness: 100,
damping: 1,
});
// Compute the force after each step
canonWorld.addEventListener("postStep", function(event) {
spring.applyForce();
});
}
})

HTML

<a-box position="0 2.6 -2" id="other-box" color="blue" static-body></a-box>
<a-box position="0 2 -2" color="green" dynamic-body spring="target: #other-box"></a-box>

在这个 fiddle 中查看.

关于aframe - 如何在框架和 cannon.js 中创建 Spring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com