2016-10-12 2 views
0

I 수 없습니다 얻을 액션을 (내가 이미지 텍스처에 대한 작업을 추가하고 수행하기에 아무런 문제가 없음) .This 내 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); 

이 내 렌더링 방법 : 귀하의 Card가 자신의 위치 Vector2 position을 사용

@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

당신이 무대에 카드를 추가 않았다

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

귀하의 그리기 방법은 모양을? –

+0

나는 무대 위에서 그려지고 터치 입력을받으며 터치 입력에 따라 위치를 변경할 수 있지만 액션으로 움직일 수는 없다. (나는 그것이 부드럽게 움직이기를 원했다) – SlavenIvanov

+0

어디에서 카드 위치 변수? super.act() 메서드를 호출하는 act를 호출하고 오버라이드 된 draw 메서드에서 batch.draw (cardFace, position.x, position.y, cardFace.getWidth() ...)를 사용하지만 position.x와 .y는 액션이 액터의 위치에서 작동 할 때 업데이트됩니다 (차이가 있는지 알아보기 위해 오버라이드 된 draw에 getX() 및 getY() 메서드를 넣으십시오) –

답변

0

. 을 Card에 추가하면 Actor 클래스의 변수 xy에 액세스하고 변경합니다. 사용자가 아닌 Actor입니다. 즉, Card에 조치가 필요한 위치가 표시되면 position.x, position.y에 그림을 그리는 대신 getX(), getY()에 그려야합니다.

귀하의 생성자는 다음과 같이 표시됩니다

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