我正在为"坦克"寻找数学解决方案。问题: 我有一个由坦克车身和大炮组成的坦克:
罐: 宽5.795米(87 px @ 720p-Resolution = 15 px / mtr) 3.8米高(57 px @ 720p-Resolution = 15 px / mtr)
炮: 6.8米宽(102 px @ 720p-Resolution = 15 px / mtr) 高度2.063米(31 px @ 720p-Resolution = 15 px / mtr)......(box2d灯具高度仅为0.4f)
每个都是一个带有box2d主体的独立对象。坦克具有旋转,并且加农炮也具有单独的旋转。 box2d的两个实体都用一个联合绑定在一起:
RevoluteJointDef jointDef = new RevoluteJointDef();
jointDef.bodyA = getBody(); // the tank-body
jointDef.bodyB = cannon.getBody();
jointDef.localAnchorB.x = -getWidth() / 3.9f; // not sure what i am doing here !?
joint = (RevoluteJoint) map.box2dworld.createJoint(jointDef);
我正在绘制两个纹理区域,它们的旋转在彼此的顶部,用于坦克车身和坦克炮。但是大炮的起源并不是那个纹理区域的中心。让我们说坦克的起源是坦克身体纹理区域的中心。并且坦克炮的旋转原点应该恰好位于坦克体的原点。但是这个大炮的起源转移到了一边(见截图)
batch.draw(tankTextureRegion,
tank.getPosition().x - tank.getWidth() * 0.5f,
tank.getPosition().y - tank.getHeight() * 0.5f,
tank.getWidth() * 0.5f, tank.getHeight() * 0.5f,
tank.getWidth(), tank.getHeight(), 1, 1,
tank.getAngleInDegress());
batch.draw(cannonTextureRegion,
tank.getPosition().x - tank.getWidth() * 0.5f + 1f, // +1f is sort of a tweaking / Workaround
tank.getPosition().y - tank.getHeight() * 0.5f + 1f, // +1f is sort of a tweaking / Workaround
2.0f, 1.0f, 6.8f, 2.063f, 1, 1, // 2.0f, 1.0f .... not quite sure here!
tank.cannon.getOwnAngle() * MathUtils.radiansToDegrees);
=>问题是,当我旋转加农炮或坦克时,加农炮仍在转移。 所以我猜有一些关于大炮起源不正确的值。
任何帮助都非常感谢!!
再见 菲尔
p.s。:我搜索了很多,但没有找到解决方案,虽然有一些类似的topcis
答案 0 :(得分:0)
我不得不把大炮的(tank.width / 2) - offset.x作为加农炮的起源。现在看起来效果很好。
batch.draw(cannonTextureRegion,
tank.getPosition().x - tank.getWidth() * 0.5f + 1f,
tank.getPosition().y - tank.getHeight() * 0.5f + 0.8667f,
tank.getWidth() * 0.5f - 1f, // origin.x
tank.getHeight() * 0.5f - 0.8667f, // origin.y
6.8f, 2.06667f, 1, 1, // size & scale
tank.cannon.getOwnAngle() * MathUtils.radiansToDegrees);