我正在尝试使用一种方法在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
更新:似乎整个屏幕都冻结了,直到功能完成。如果没有多线程,有没有可能做类似的事情?
答案 0 :(得分:1)
你的while循环确实阻止了渲染线程。动画制作动画的方法是每帧更新一次。为您重复调用游戏的渲染方法。每张卡片只应在您的方法中执行一步动画。如果你想为某些东西制作动画,然后继续做一些事情,你必须使用变量来跟踪你正在做的事情,以确定一个特定的动画是否需要完成。
你永远不应该直接调用屏幕的渲染方法。