use*_*282 1 java graphics rotation box2d jbox2d
我有一个Arraylist,其中的对象包含一个对象的位置和旋转,我想使用Graphics2D在屏幕上绘制.
public void render(Graphics g1) {
Graphics2D g = (Graphics2D) g1;
g.setColor(Color.white);
for(PhysicObject object : entities) {
if (object.getBody().getType() == BodyType.DYNAMIC) {
Vec2 position = object.getBody().getPosition().mul(30);
g.translate(position.x, position.y);
g.rotate(object.getBody().getAngle());
g.fillRect((int)-(object.width), (int)-(object.height), (int)(object.width*2), (int)(object.height*2));
}
}
}
Run Code Online (Sandbox Code Playgroud)
第一个对象始终旋转正确,但以下旋转第一个对象而不围绕自身.
希望有人可以帮助我,谢谢.
要独立旋转每个对象,必须撤消第一个对象的平移和旋转.因此,最简单的方法是使用AffineTransform"组合"两个转换并更容易地撤消它们.例如
AffineTransform t = new AffineTransform();
t.translate(position.x, position.y);
t.rotate(object.getBody().getAngle());
g.transform(t);
g.fillRect((int)-(object.width), (int)-(object.height), (int)(object.width*2), (int)(object.height*2));
try{
g.transform(t.createInverse());
}catch(NoninvertibleTransformException e){
//...
}
Run Code Online (Sandbox Code Playgroud)
createInverse()创建"反向"转换并将Graphics空间返回到其原始状态.然后下一个转换应该工作正常.
归档时间: |
|
查看次数: |
1663 次 |
最近记录: |