gpt4 book ai didi

javascript - 将 javaScript 对象转换为不同的对象类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:34:39 25 4
gpt4 key购买 nike

这与 Three.js + Socket IO + CANNON.js 有关。我的服务器上有一个 CANNON.RigidBody 对象,我无法按原样发送。所以我把它改成这样:

// Create a sphere
var mass = 5,
radius = 1.8;
var sphereShape = new CANNON.Sphere(radius);
var physicsMaterial = new CANNON.Material("slipperyMaterial");
var sphereBody = new CANNON.RigidBody(mass, sphereShape, physicsMaterial);
sphereBody.position.set(0, 10, 0);
sphereBody.linearDamping = 0.9;
cannonWorld.add(sphereBody);
cannonEntities[(numBodies++).toString()] = sphereBody;
player = {
type: "player",
data: {
id:((numBodies++).toString()),
position: sphereBody.position,
quaternion: sphereBody.quaternion,
velocity: sphereBody.velocity,
radius:radius,
mass:mass
} }

并将其发送给我的客户......

broadcastJsonEvent(JSON.stringify(player))

在我的客户端中,我将这个“玩家”对象传递到我的控件中,通常情况下,而不是玩家会传递 CANNON.RigidBody 对象。

controls = new PointerLockControls(camera, player);
scene.add(controls.getObject());

因为我无法发送完整的对象,它是......一个 CANNON.RigidBody 我将它作为那个播放器对象发送,并且在 PointerLockControls 中最后一行看起来像这样......这就是所有失败的地方。

cannonBody.position.copy(yawObject.position);

现在我的播放器对象没有复制方法。我能做些什么?请帮忙。这是我试过的。记住 cannonBody = player!!即使我得到复制方法还是不行。

var copyBody = new CANNON.Vec3(cannonBody.position.x,cannonBody.position.y,cannonBody.position.z); 
cannonBody = $.extend(cannonBody,new CANNON.RigidBody(cannonBody.mass,new CANNON.Sphere(1.8),new CANNON.Material("slipperyMaterial")));
cannonBody.position = $.extend(copyBody);
cannonBody.position.copy(yawObject.position);

即使我得到了copy方法还是不行。 :(

最佳答案

假设你只需要做复制操作,你可以这样做:

CANNON.Vec3.prototype.copy.call(cannonBody.position,yawObject.position);

这行代码使用了 CANNON.Vec3 中的复制方法。您可能需要查找 Function.prototype.call了解这是如何工作的。请注意,您需要在客户端加载 Cannon.js 才能执行此操作。

根据您其余代码的作用,在客户端创建一个本地 CANNON.RigidBody 实例可能更方便。每当您从服务器获得更新时,您都可以使用新状态更新此正文。

关于javascript - 将 javaScript 对象转换为不同的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723083/

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