Я не понимаю, как работает affine2, кто-то просит меня использовать Affine2 вместо spriteBatch.transformMatrix, чтобы избежать сброса каждого рисунка текстуры.
В видео, которое я показываю вам, что происходит с Affine2, все смешано: (
https://youtu.be/3ErGAcvyC8s
@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;
}