首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用来自Ammo.js的setUserPointer/getUserPointer

如何使用来自Ammo.js的setUserPointer/getUserPointer
EN

Stack Overflow用户
提问于 2021-08-30 23:14:38
回答 1查看 132关注 0票数 0

我要打印碰撞物体的名字。我举了一个很简单的例子。

我创建了一个对象来保存用户数据:

代码语言:javascript
复制
        const userData = { name: name };

我使用setUserPointer将这个对象保存在一个主体中:

代码语言:javascript
复制
body.setUserPointer(userData);

我尝试使用getUserPointer获取这个名称并打印它们。但我得到的是“未定义”而不是名字:

代码语言:javascript
复制
function detectCollison(): void
{
    const dispatcher = physicsWorld.getDispatcher();
    const numManifolds = dispatcher.getNumManifolds();

    for (let i = 0; i < numManifolds; i++)
    {
        const contactManifold = dispatcher.getManifoldByIndexInternal(i);
        const body0 = contactManifold.getBody0();
        const body1 = contactManifold.getBody1();

        const p0 = body0.getUserPointer();
        const p1 = body1.getUserPointer();

        console.log("first object: " + p0.name);
        console.log("second object: " + p1.name);
    }
}

编辑的

这是纯TypeScript版本。我试图将名字保留为身体属性,但它也不起作用。它打印“未定义”而不是名称:

代码语言:javascript
复制
        (this.body as any).name = name;

        physicsWorld.addRigidBody(this.body);
代码语言:javascript
复制
function detectCollison(): void
{
    const dispatcher = physicsWorld.getDispatcher();
    const numManifolds = dispatcher.getNumManifolds();

    for (let i = 0; i < numManifolds; i++)
    {
        const contactManifold = dispatcher.getManifoldByIndexInternal(i);
        const body0 = contactManifold.getBody0();
        const body1 = contactManifold.getBody1();

        console.log("first object: " + (body0 as any).name);
        console.log("second object: " + (body1 as any).name);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 15:16:59

解决方案:

代码语言:javascript
复制
const userData = { name: name };
(this.body as any).userData = userData;
代码语言:javascript
复制
function detectCollison(): void
{
    const dispatcher = physicsWorld.getDispatcher();
    const numManifolds = dispatcher.getNumManifolds();

    for (let i = 0; i < numManifolds; i++)
    {
        const contactManifold = dispatcher.getManifoldByIndexInternal(i);
        const body0 = contactManifold.getBody0();
        const body1 = contactManifold.getBody1();

        const rb0 = (Ammo as any).castObject( contactManifold.getBody0(), Ammo.btRigidBody );
        const rb1 = (Ammo as any).castObject( contactManifold.getBody1(), Ammo.btRigidBody );

        console.log("first object:", rb0.userData);
        console.log("second object:", rb1.userData);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68991208

复制
相关文章

相似问题

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