在 LibGDX 中缩放和转换

Scale and transform in LibGDX

我必须在我的 Android 应用中使用 LibGDX 做这样的事情:

球是一个具有拖动侦听器并添加到舞台的图像:

ballImage.addListener(new DragListener() {
  public void drag(InputEvent event, float x, float y, int pointer) {
    ballImage.moveBy(x - ballImage.getWidth() / 2, y - ballImage.getHeight() / 2);
  }
});

效果很好。但是我在缩放球时遇到了问题。我无法缩放球并保持其位置并且拖动停止正常工作(触摸时球跳到屏幕外)。我试过这样的事情:

massSlider.addListener(new ChangeListener() {
  public void changed (ChangeEvent event, Actor actor) {
    float x = ballImage.getX() - ballImage.getWidth() / 2;
    float y = ballImage.getY() - ballImage.getHeight() / 2;
    ballImage.moveBy(x, y);
    ballImage.setScale(massSlider.getValue());
    ballImage.moveBy(-x, -y);
  }
});

此外,我尝试使用 scaleBy()/setScale() 和 moveBy()/setPosition(),或者在缩放前后根本不移动球,但似乎没有任何效果。我做错了什么?

缩放通常是您想要(并且很容易)避免的事情。很高兴使用缩放,例如用于创建短弹出或弹出效果的操作。但除此之外,调整大小通常要好得多。因此,您不使用 setScale(a),而是使用:setSize(a * unscaledWidth, a * unscaledHeight)。请注意,您必须为此跟踪未缩放的宽度和高度。