我正在尝试使用一种方法在 libGDX 中移动 Sprite ,该方法在每次调用时更改其 x 和 y 坐标(它应该是纸牌游戏的“动画”)。
if (card.isAnimated()) {
card.getSprite().setX(card.getX());
card.getSprite().setY(card.getY());
System.out.println("X: " + card.getSprite().getX());
System.out.println("Y: " + card.getSprite().getY());
card.getSprite().draw(batch); }
System.out 会根据新坐标完美更新,但卡片在屏幕上的位置不会改变。另一个奇怪的事情是:我使用的拖放操作基本上以相同的方式工作,而且效果很好!
if(card.isDragged() == true){
//Card is dragged:
card.getSprite().setX(card.getX());
card.getSprite().setY(card.getY());
card.getSprite().draw(batch); }
渲染函数会被自动函数阻塞吗?它看起来类似于:
public void animateCardsPlayed(ArrayList<Card> cards) {
for(Card card : cards) {
card.setAnimated(true);
float deltaX = card.getX() - CardStack.ACTIVE_X;
float deltaY = card.getY() - CardStack.ACTIVE_Y;
System.out.println("DELTAX: " + deltaX);
System.out.println("DELTAY: " + deltaY);
if (deltaX <= 0) { //Karte links von Stapel
if (deltaY <= 0) { //Karte unter Stapel
while (card.getX() <= CardStack.ACTIVE_X && card.getY() <= CardStack.ACTIVE_Y) {
if (card.getX() <= CardStack.ACTIVE_X) {
float newX = card.getX() - deltaX/1000f;
card.setX(newX);
card.getSprite().setX(card.getX());
}
if (card.getY() <= CardStack.ACTIVE_Y) {
float newY = card.getY() - deltaY/1000f;
card.setY(newY);
card.getSprite().setY(card.getY());
}
System.out.println("1HIER");
screen.render(0); //Maybe that's the problem?
} //...
有人有想法吗?我将非常感激.. 此致, 塞比
更新:似乎整个屏幕都卡住了,直到函数完成为止。是否有可能在没有多线程的情况下执行类似的操作?
最佳答案
您的 while 循环确实阻塞了渲染线程。制作动画的方法是每帧更新一次。游戏的渲染方法会被重复调用。每张卡片在您的方法中应该只执行一个动画步骤。例如,如果您想要为某些内容设置动画,然后继续执行某些操作,则必须使用变量来跟踪您正在执行的操作以确定特定动画是否需要完成。
并且您永远不应该直接调用屏幕的渲染方法。
关于java - 自动移动 Sprite libGDX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253007/