2013-02-21 4 views
5

Tôi muốn dần dần làm động tác diễn viên của mình. Tôi thêm hành động này để di chuyển diễn viên từ điểm A đến điểm B.Hành động Libgdx => dần dần di chuyển Diễn viên từ điểm A đến điểm B

addAction(Actions.sequence(Actions.moveBy(1, 1), Actions.moveTo(posX, posY))); 

Cũng cố gắng này (moveTo trong 10 giây):

addAction(Actions.moveTo(posX, posY, 10))); 

Nhưng diễn viên di chuyển quá nhanh. Chuyện gì vậy?

+0

Bạn có thể cũng sử dụng [Universal Tween Engine] (https://github.com/AurelienRibon/universal-tween-engine) cho việc này. Hoạt động cũng cho sprites và có nhiều chức năng. – trinity420

Trả lời

10

Hình thức thứ hai:

addAction(Actions.moveTo(posX, posY, 10))); 

nên di chuyển diễn viên của bạn để posX, Posy trong quá trình 10 giây.

Biểu mẫu đầu tiên sẽ di chuyển diễn viên 1 bước trong x và y và sau đó hoàn tất di chuyển diễn viên ngay lập tức sang posX, posY. Actions.sequence chạy các hành động đã cho sau lần khác, chúng không sửa đổi lẫn nhau.

Bạn đang gọi số điện thoại act() trên sân khấu như thế nào? Đó là những gì xác định bao nhiêu để cập nhật một khung hình Actor, vì vậy nếu bạn gọi nó nhiều lần trên mỗi khung hoặc vượt qua giá trị sai, các hành động sẽ vượt qua quá nhanh.

+0

+1 cho tôi một đầu mối. – Alf

4

Chỉ vì câu trả lời của bạn là hàng đầu khi tôi tìm kiếm 'Libgdx Move to Point', tôi sẽ đăng một giải pháp ở đây.

Dưới đây là một giải pháp, chứ không phải riêng cho Diễn viên:

Xác định bạn biến Vector2 trong lớp, chúng sẽ được sử dụng cho vị trí đối tượng:

protected Vector2 v2Position; 
protected Vector2 v2Velocity; 

Vị trí được thiết lập trong constructor hoặc bất cứ nơi nào khác. Để có được Velocity của đối tượng và di chuyển nó đến điểm nhất định:

public void setVelocity (float toX, float toY) { 

// The .set() is setting the distance from the starting position to end position 
v2Velocity.set(toX - v2Position.x, toY - v2Position.y); 
v2Velocity.nor(); // Normalizes the value to be used 

v2Velocity.x *= speed; // Set speed of the object 
v2Velocity.y *= speed; 
} 

Bây giờ chỉ cần thêm Velocity đến Vị trí và đối tượng sẽ di chuyển đến điểm nhất định

@Override public void update() { 
    v2Position.add (v2Velocity); // Update position 
} 
+0

Cảm ơn, điều này đã cho tôi đi đúng hướng. Trong phương thức cập nhật, tôi đã làm 'v2Position.lerp (v2Velocity);' bởi vì tôi cần đối tượng để di chuyển đến và dừng lại ở một vị trí cụ thể. – Raf