2012-12-17 33 views
18

Nếu tôi hiểu đúng, LibGDX đang quay một hình ảnh với việc sử dụng các phương pháp addActions:Làm thế nào để xoay một diễn viên hình ảnh trong libgdx bằng điểm giữa?

this.addAction(parallel(rotateBy(360, 0.5f), moveTo(320, 100, 0.5f))); 

Có điều là, nó đang được xoay theo điểm = (0,0) của hình ảnh.

Dưới đây là câu hỏi của tôi:

Có cách nào để xoay một hình ảnh bởi điểm trung tâm của đối tượng? Một cái gì đó như ghim nó ở giữa và sau đó biến nó giống như một bánh xe trong một chiếc xe hơi? Cả rotateByrotateTo phương pháp biến nó bởi (0,0) điểm của hình ảnh bản thân.

Trả lời

29

Bạn phải đặt đúng "nguồn gốc" của diễn viên. Bạn có thể đọc từ Actor API rằng nguồn gốc có liên quan đến vị trí và được sử dụng cho quy mô và xoay vòng.

Vì vậy, hãy tính điểm giữa của bạn và đặt nguồn gốc thành điểm giữa.

Actor a; 
.... 
a.setOrigin(a.getWidth()/2, a.getHeight()/2); 
+0

Đó là giải pháp dễ nhất. Tôi chỉ thiết lập nguồn gốc bên trong của Actor trong phương thức roll_onto_screen(). Cảm ơn các bạn! –

+0

Nếu tôi phải liên tục xoay một diễn viên hoặc nhóm thì sao? – ManishSB

+0

Bạn chỉ cần quấn rotationAction thành một hành động lặp lại hơn, và thiết lập hành động lặp lại là tác nhân của hành động. – Kedu

3

Cách dễ nhất là dịch đối tượng sao cho điểm 0,0 là tâm, xoay nó, sau đó dịch trở lại vị trí. Tôi không quen thuộc với libGDX, nhưng phải có một phương pháp để tổng hợp ba biến đổi, có nghĩa là bạn chỉ áp dụng một biến đổi tổng hợp cho đối tượng của bạn. Hãy nhớ thứ tự bạn tổng hợp các biến đổi, tạo sự khác biệt.

Một cách phức tạp hơn mang lại kết quả chính xác tương tự như tính toán số lượng bù đắp được tạo ra bởi xoay và dịch hình ảnh trở về nguồn gốc của nó. Đừng làm theo cách này. Kết hợp ba biến đổi đơn giản là cách để đi và một trong những lý do tốt nhất để sử dụng các biến đổi.

** Chỉnh sửa Nhìn vào API đối tượng diễn viên có phương thức dịch(). Sử dụng điều này để thay đổi hình ảnh của bạn để điểm 0,0 nằm ở giữa. Trong psuedocode;

x = this.getX(); 
y = this.getY(); 
cx = this.getWidth() * .5; 
cy = this.getHeight() * .5; 
this.translate(-(x+cx), -(y+cy)); // move so 0,0 is the centre of the Actor object 
this.rotate(thisMuch); // rotate the Actor 
this.translate((x+cx), (y+cy)); // move it back to its original location 

Điều này sẽ dẫn đến đối tượng của bạn quay ở điểm giữa của nó ngay tại chỗ. Nó trông phức tạp, nhưng nó khá hiệu quả trong thực tế, nhiều hơn như vậy nếu bạn có thể làm việc trực tiếp với các ma trận (biến đổi) sẽ được lái xe các phương pháp này.

+0

phương thức moveTo (320, 100, 0.5f) được sử dụng để di chuyển hình ảnh đến điểm x = 320 y = 100 trên bản đồ. Tôi không nghĩ rằng tôi hiểu làm thế nào tôi sẽ dịch ** đối tượng **. –

+0

Ghi nhớ, đây là cái nhìn đầu tiên của tôi tại libGDX :-) Tôi đang sửa đổi câu trả lời ở trên. –

3

Đây là cách đơn giản để bạn xoay một diễn viên trong libgdx.

Trước tiên, bạn cần phải thiết lập nguồn gốc:

img.setorigin(width/2,hieght/2); 

Bây giờ bạn có thể xoay chiều kim đồng hồ và ngược lại, theo nhu cầu của bạn:

img.rotate(2f); 

hoặc

img.rotate(-2f); 
2

Các đơn giản nhất và cách ngắn nhất tôi tìm được để thiết lập nguồn gốc là gọi:

Actor a; 

... 

a.setOrigin(Align.center); 
Các vấn đề liên quan