Javascript 某些函数在ammo.js中不起作用,尽管物理文档显示它们应该起作用
为了澄清这一点,ammo.js是一个使用emscripten的子弹物理端口 好的,我刚刚制作了这个快速而肮脏的脚本,用按键移动一个块,这很好,也很有效。然而,当我想旋转块时,chrome一直告诉我 TypeError:quat1.setEulerZYX不是函数Javascript 某些函数在ammo.js中不起作用,尽管物理文档显示它们应该起作用,javascript,bulletphysics,ammo.js,Javascript,Bulletphysics,Ammo.js,为了澄清这一点,ammo.js是一个使用emscripten的子弹物理端口 好的,我刚刚制作了这个快速而肮脏的脚本,用按键移动一个块,这很好,也很有效。然而,当我想旋转块时,chrome一直告诉我 TypeError:quat1.setEulerZYX不是函数 try { var px = parseFloat(tempCamz); // Turns strings into integers var py = parseFloat((tempCamy * -1)); v
try {
var px = parseFloat(tempCamz); // Turns strings into integers
var py = parseFloat((tempCamy * -1));
var pz = parseFloat(tempCamx);
var quat1 = new Ammo.btQuaternion();
quat1.setEulerZYX(0.5,0,0);
var blockShape = new Ammo.btBoxShape(new Ammo.btVector3(1/4, 1, 1/2));
var mass = 1;
var blockTransform = new Ammo.btTransform();
blockTransform.setIdentity();
blockTransform.setRotation(quat1);
blockTransform.setOrigin(new Ammo.btVector3(px, py, pz));
var localInertia = new Ammo.btVector3(0, 0, 0);
var myMotionState = new Ammo.btDefaultMotionState(blockTransform);
blockShape.calculateLocalInertia(mass,localInertia);
var rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, myMotionState, blockShape, localInertia);
var body = new Ammo.btRigidBody(rbInfo);
body.setLinearVelocity(origvel);
instances[i].physObj = body;
dynamicsWorld.addRigidBody(instances[i].physObj);
} catch(err) {
console.log(err);
}
现场
尽管声明明确指出setEulerZYX是一个函数
try {
var px = parseFloat(tempCamz); // Turns strings into integers
var py = parseFloat((tempCamy * -1));
var pz = parseFloat(tempCamx);
var quat1 = new Ammo.btQuaternion();
quat1.setEulerZYX(0.5,0,0);
var blockShape = new Ammo.btBoxShape(new Ammo.btVector3(1/4, 1, 1/2));
var mass = 1;
var blockTransform = new Ammo.btTransform();
blockTransform.setIdentity();
blockTransform.setRotation(quat1);
blockTransform.setOrigin(new Ammo.btVector3(px, py, pz));
var localInertia = new Ammo.btVector3(0, 0, 0);
var myMotionState = new Ammo.btDefaultMotionState(blockTransform);
blockShape.calculateLocalInertia(mass,localInertia);
var rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, myMotionState, blockShape, localInertia);
var body = new Ammo.btRigidBody(rbInfo);
body.setLinearVelocity(origvel);
instances[i].physObj = body;
dynamicsWorld.addRigidBody(instances[i].physObj);
} catch(err) {
console.log(err);
}
ammo.js不会公开所有项目符号实体的完整API: 并不是所有的类都公开,因为只有ammo.idl中描述的类被包装 -从 有关可用方法的列表,请参见 您可以更新ammo.idl并添加所需方法的定义,然后使用自定义生成或尝试将更改导入upstreem,有关说明,请参阅 我没有足够的耐心自己构建这个东西(主要是因为Debian repository中默认的emscripten包存在问题),但是让emscripten工作应该很容易,在
btQuaternion
定义中包含setEulerZYX()
的声明,更新后的定义可能是这样的(但我没有尝试,所以它可能有效,也可能无效):