我不了解affine2的工作原理,有人要求我使用Affine2而不是spriteBatch.transformMatrix来避免刷新每个纹理图。
在视频中,我向您展示了Affine2发生了什么,所有都是混合的:(
@Override
public void draw(SpriteBatch spriteBatch, ShapeRenderer shapeRenderer, Affine2 affine2) {
if (texture == null)
return;
spriteBatch.setColor(1, 1, 1, getAlpha());
spriteBatch.draw(texture, size.width, size.height, calculate(affine2));
}
public Affine2 calculate(Affine2 affine2) {
List<SKNode> nodes = getParents();
Collections.reverse(nodes);
nodes.add(this);
affine2.idt();
affine2.translate(-size.width / 2, -size.height / 2);
for (SKNode node : nodes) {
affine2.translate(node.position.x + node.origin.x, node.position.y + node.origin.y);
affine2.rotate(node.zRotation);
affine2.scale(node.xScale, node.yScale);
affine2.translate(-node.origin.x, -node.origin.y);
}
return affine2;
}
当我使用spriteBatck transformMatrix时,会使fps下降,但显示效果完美。
public Matrix4 getTransformMatrix() {
List<SKNode> nodes = getParents();
Collections.reverse(nodes);
nodes.add(this);
Matrix4 transformMatrix = new Matrix4();
transformMatrix.idt();
for (SKNode node : nodes) {
transformMatrix.translate(node.position.x + node.origin.x, node.position.y + node.origin.y, 0);
transformMatrix.rotate(0, 0, 1, node.zRotation);
transformMatrix.scale(node.xScale, node.yScale, 0);
transformMatrix.translate(-node.origin.x, -node.origin.y, 0);
}
return transformMatrix;
}