如何在Java中正确旋转多个对象?
我有一个包含对象的Arraylist,其中包含我想使用Graphics2D在屏幕上绘制的对象的位置和旋转如何在Java中正确旋转多个对象?,java,graphics,rotation,box2d,jbox2d,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) { V
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));
}
}
}
第一个对象始终正确旋转,但以下对象围绕第一个对象旋转,而不是围绕自身旋转
希望有人能帮助我,谢谢。当你
翻译和旋转时,这会永久影响你的图形对象。在调用fillRect
后,确保将bask平移并旋转到原始原点和方向
g.translate(-position.x, -position.y);
g.rotate(-object.getBody().getAngle());
当您平移
和旋转
时,这将永久影响图形对象。在调用fillRect
后,确保将bask平移并旋转到原始原点和方向
g.translate(-position.x, -position.y);
g.rotate(-object.getBody().getAngle());
要独立旋转每个对象,必须撤消第一个对象的平移和旋转。因此,最简单的方法是使用仿射变换来“组合”这两个变换,并更容易地撤消它们。e、 g
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){
//...
}
createInverse()创建“反向”变换并将图形空间返回到其原始状态。然后下一个变换应该可以正常工作。要独立旋转每个对象,必须撤消第一个对象的平移和旋转。因此,最简单的方法是使用仿射变换来“组合”这两个变换,并更容易地撤消它们。e、 g
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){
//...
}
createInverse()创建“反向”变换并将图形空间返回到其原始状态。然后下一个转换应该可以正常工作。不要使用图形上下文旋转方法,而是尝试使用一个
您需要在每个循环上重置变换
更好的方法是利用shapes API并转换形状不要使用图形上下文旋转方法,而是尝试使用图形上下文旋转方法
您需要在每个循环上重置变换
更好的方法是利用shapes API并转换形状