2016-10-12 2 views
0

я не могу получить мой актер карты, чтобы выполнить действие (я не имею никаких проблем с добавлением и выполнения действий на изображения и текстуры) .Это мой Card.class код:LibGDX Актер не выполняет действий

public class Card extends Actor { 
final float CARD_WIDTH = 500 * cardScale; 
final float CARD_HEIGHT = 726 * cardScale; 
String face, suit; 
public Texture cardFace = new Texture("CardTextures/" + face + suit + ".png"); 

Vector2 position = new Vector2(0, 0); 

public Card(String face, String suit, Vector2 position) { 
    this.face = face; 
    this.suit = suit; 
    this.position = position; 
    setBounds(position.x, position.y, CARD_WIDTH, CARD_HEIGHT); 
} 

public Card(String face, String suit) { 
    this.face = face; 
    this.suit = suit; 
    this.position = position; 
    setBounds(position.x, position.y, CARD_WIDTH, CARD_HEIGHT); 
} 

@Override 
public void act(float delta) { 
    super.act(delta); 

} 

@Override 
public void draw(Batch batch, float alpha) { 
    batch.draw(cardFace, position.x, position.y, cardFace.getWidth() * cardScale, cardFace.getHeight() * cardScale); 
} 

public String getFace() { 
    return face; 
} 

public String getSuit() { 
    return suit; 
} 

public void setCardPosition(Vector2 position) { 
    this.position = position; 

} 

public void setCardFaceTexture() { 
    cardFace = new Texture(("CardTextures/" + this.getFace() + this.getSuit() + ".png")); 
} 

}

Всякий раз, когда я пытаюсь выполнить действие с Актером Карты, он не работает. Даже когда я помещаю действия в метод Create(), он не работает. Я попытался это:

moveAction = new MoveToAction(); 
    moveAction.setPosition(300f, 0f); 
    moveAction.setDuration(10f); 
    Card card = new Card("two", "spades"); 
    card.addAction(moveAction); 

Это мой метод визуализации:

@Override 
public void render() { 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    stage.act(Gdx.graphics.getDeltaTime()); 
    stage.draw(); 
    updateActorBounds(); 

    camera.update(); 

    batch.setProjectionMatrix(camera.combined); 

    batch.begin(); 
    font.draw(batch, "FPS:" + Gdx.graphics.getFramesPerSecond(), TABLE_WIDTH/2 - 65, TABLE_HEIGHT/2 - 10); 
    batch.end(); 
} 
+0

вы добавить карту на сцену? –

+0

Я сделал, и он нарисован на сцене, он получает сенсорный ввод, я могу изменить его позицию на основе сенсорного ввода, но я не могу заставить его двигаться с помощью Action (я хотел, чтобы он плавно перемещался). – SlavenIvanov

+0

где вы обновляете свой Переменная позиции карты? Вы вызываете действие, которое вызывает метод super.act(), и в вашем методе overriden draw вы используете batch.draw (cardFace, position.x, position.y, cardFace.getWidth() ... но position.x и .y обновляется, когда действие действует на позицию Актера (попробуйте поместить методы getX() и getY() в ваш пример, чтобы увидеть, есть ли разница) –

ответ

0

Ваш Card использует свою собственную позицию Vector2 position. Когда вы добавляете MoveAction в ваш Card, действие выполняет доступ и изменяет переменные x и y в классе Actor - а не ваш. Это означает, что если вы хотите, чтобы ваш Card отображался там, где действия говорят, что нужно, вместо того, чтобы рисовать на position.x, position.y, вам необходимо нарисовать на getX(), getY().

Ваш конструктор будет выглядеть следующим образом:

public Card(String face, String suit, Vector2 position) { 
    this.face = face; 
    this.suit = suit; 
    setBounds(position.x, position.y, CARD_WIDTH, CARD_HEIGHT); 
} 

Ваш метод рисования будет выглядеть следующим образом:

@Override 
public void draw(Batch batch, float alpha) { 
    batch.draw(cardFace, getX(), getY(), cardFace.getWidth() * cardScale, cardFace.getHeight() * cardScale); 
} 
Смежные вопросы