Нужна помощь, чтобы понять разницу между Affine2 и Matrix4 - PullRequest
0 голосов
/ 02 июня 2019

Я не понимаю, как работает 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;
}
...