java - 自动移动 Sprite libGDX

标签 java libgdx sprite render

我正在尝试使用一种方法在 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/

相关文章:

dynamic - 在libgdx中,如何创建动态纹理?

java - LibGDX:循环时使用 SpriteBatches

c# - MonoGame/XNA 旋转图像

使用悬停+单击图像 Sprite 的 JQuery 导航菜单

java - 如何将 Base64 blob 字符串转换为 android 中的图像?

java - 将现有文件夹复制到 Eclipse 工作区中新创建的项目中

java - 将 Sprite 移动到鼠标点击[Libgdx];

java - 如何从java类调用python脚本

java - 如何将 Char[] 转换为 Vector

java - 在 LibGDX 中每次都不会调用 ContactListner(Box2d) 的 EndContact