自动移动Sprite libGDX

时间:2018-01-14 18:51:31

标签: java libgdx sprite render

我正在尝试使用一种方法在libGDX中移动一个精灵,即每次调用它时都会改变它的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?
                        } //...

有人有想法吗?我会非常感激.. 最好的祝福, Sebie

更新:似乎整个屏幕都冻结了,直到功能完成。如果没有多线程,有没有可能做类似的事情?

1 个答案:

答案 0 :(得分:1)

你的while循环确实阻止了渲染线程。动画制作动画的方法是每帧更新一次。为您重复调用游戏的渲染方法。每张卡片只应在您的方法中执行一步动画。如果你想为某些东西制作动画,然后继续做一些事情,你必须使用变量来跟踪你正在做的事情,以确定一个特定的动画是否需要完成。

你永远不应该直接调用屏幕的渲染方法。

相关问题