在 libgdx 中使用 ShapeRenderer 旋转矩形
Rotate a rectangle using ShapeRenderer in libgdx
为什么我的 rect
在 draw()
期间不旋转?
当我启用 box2d
调试时,我看到实际的 box2d 对象正确旋转但实际渲染的形状不旋转..
Tween.to(getPlayer(), ShapeAccessor.ANGLE, 0.7f)
.target(0.4f)
.ease(Elastic.OUT)
.repeatYoyo(0, 0)
.start(getLevel().getTweenManager());
Player
有以下 draw()
方法..
public void draw(ShapeRenderer sRenderer, Vector2 pos) {
sRenderer.begin(ShapeType.Filled);
sRenderer.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
sRenderer.identity();
sRenderer.rotate(0, 0, 1, getAngle());
sRenderer.translate(pos.x - getWidth(), pos.y - getHeight(), 0);
sRenderer.rect(0, 0, getWidth() * 2, getHeight() * 2);
sRenderer.end();
}
这是我的 TweenAccessor
..
public class ShapeAccessor implements TweenAccessor<Shape> {
public static final int ANGLE = 5;
public int getValues(Shape target, int tweenType, float[] returnValues) {
switch (tweenType) {
case ANGLE: // animate object by rotation
returnValues[0] = ((Shape) target).getBody().getAngle();
return 1;
default:
assert false;
return -1;
}
}
public void setValues(Shape target, int tweenType, float[] newValues) {
switch (tweenType) {
case ANGLE: // animate object by rotation
((Shape) target).getBody().setTransform(
((Shape) target).getBody().getPosition(),
newValues[0]);
break;
default:
assert false;
}
}
}
需要将角度放大 60
并修改 .rect
坐标..
sRenderer.begin(ShapeType.Filled);
sRenderer.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
sRenderer.identity();
sRenderer.translate(pos.x, pos.y, 0);
sRenderer.rotate(0, 0, 1, getBody().getAngle() * 60.0f);
sRenderer.rect(-getWidth(), -getHeight(), getWidth() * 2, getHeight() * 2);
sRenderer.end();
为什么我的 rect
在 draw()
期间不旋转?
当我启用 box2d
调试时,我看到实际的 box2d 对象正确旋转但实际渲染的形状不旋转..
Tween.to(getPlayer(), ShapeAccessor.ANGLE, 0.7f)
.target(0.4f)
.ease(Elastic.OUT)
.repeatYoyo(0, 0)
.start(getLevel().getTweenManager());
Player
有以下 draw()
方法..
public void draw(ShapeRenderer sRenderer, Vector2 pos) {
sRenderer.begin(ShapeType.Filled);
sRenderer.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
sRenderer.identity();
sRenderer.rotate(0, 0, 1, getAngle());
sRenderer.translate(pos.x - getWidth(), pos.y - getHeight(), 0);
sRenderer.rect(0, 0, getWidth() * 2, getHeight() * 2);
sRenderer.end();
}
这是我的 TweenAccessor
..
public class ShapeAccessor implements TweenAccessor<Shape> {
public static final int ANGLE = 5;
public int getValues(Shape target, int tweenType, float[] returnValues) {
switch (tweenType) {
case ANGLE: // animate object by rotation
returnValues[0] = ((Shape) target).getBody().getAngle();
return 1;
default:
assert false;
return -1;
}
}
public void setValues(Shape target, int tweenType, float[] newValues) {
switch (tweenType) {
case ANGLE: // animate object by rotation
((Shape) target).getBody().setTransform(
((Shape) target).getBody().getPosition(),
newValues[0]);
break;
default:
assert false;
}
}
}
需要将角度放大 60
并修改 .rect
坐标..
sRenderer.begin(ShapeType.Filled);
sRenderer.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
sRenderer.identity();
sRenderer.translate(pos.x, pos.y, 0);
sRenderer.rotate(0, 0, 1, getBody().getAngle() * 60.0f);
sRenderer.rect(-getWidth(), -getHeight(), getWidth() * 2, getHeight() * 2);
sRenderer.end();