Tôi muốn tạo bong bóng trợ giúp nổi để giới thiệu chức năng cơ bản của trò chơi của tôi. Bong bóng này nên trôi nổi phía trên diễn viên Tôi muốn nó giải thích, như thể hiện trong hình dưới đây.Nhận tọa độ của Diễn viên trong Bảng trong libGDX
Để thực hiện điều này, tôi muốn các tọa độ của các diễn viên, trong trường hợp này nút trái, và sau đó tôi có thể thêm Actor bong bóng vào Stage trước mọi thứ khác. Phần cuối cùng là dễ dàng, nhưng tôi đang đấu tranh với việc lấy các tọa độ thực tế của nút, vì nó nằm trong một bảng.
Hai nút được thêm vào một bảng như thế này:
t.add(btnLab).expandX().center();
t.add(btnSea).expandX().center();
Tôi đã thử các cách tiếp cận rõ ràng nhất:
Vector2 loc = new Vector2(a.getX(), a.getY());
System.out.println("Loc: " + loc);
a.localToStageCoordinates(loc);
System.out.println("Loc: " + loc);
này mang lại cho tôi (theo thứ tự của sysouts): [0.0, 0.0] và [40.0, 130.0]. Vị trí cuối cùng thực sự là vị trí của Bảng, lấp đầy vùng màu xanh của màn hình. Vì vậy, vị trí này rõ ràng là bỏ lỡ một cái gì đó Bảng không đặt diễn viên, và không thể được sử dụng (như tôi chỉ kết thúc với vị trí của Bảng).
(Tôi cũng đã cố gắng sử dụng t.localToStageCoordinates đây, t là Bảng kết quả tương tự..)
Một giải pháp tôi đã cố gắng là đệ quy tìm kiếm thông qua tất cả các bậc cha mẹ:
private static Vector2 getLoc(Actor a) {
return getLoc(new Vector2(a.getX(), a.getY()), a.getParent());
}
private static Vector2 getLoc(Vector2 loc, Actor g) {
System.out.println("Location: " + loc + ", Actor: " + g);
loc.x += g.getX();
loc.y += g.getY();
if(g.getParent() == null) return loc;
return getLoc(loc, g.getParent());
}
Thật không may, điều này mang lại cho tôi như vậy. Các sysouts cung cấp những điều sau đây:
Location: [0.0:0.0], Actor: Table 40.0,130.0 944.0x508.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
Location: [40.0:130.0], Actor: Group 0.0,0.0 0.0x0.0
Vì vậy, tôi dường như không thể có được vị trí thực tế của Nhóm/diễn viên trong bảng.
Tôi phải làm như thế nào?
Ngoài câu trả lời của tôi, tôi tự hỏi nếu bạn đang cố gắng để có được vị trí của diễn viên trước khi diễn viên lần đầu tiên được kết xuất? Nếu bạn cố gắng để có được vị trí trước khi khuôn khổ đã có thời gian để làm một cách bố trí chính xác bạn sẽ nhận được các hợp âm sai. Trong ví dụ của tôi, tôi giảm bớt điều này bằng cách sử dụng trình xử lý sự kiện để có được vị trí chính xác sau khi bố cục đã được thực hiện. – Jyro117
Tôi có một 'Bảng' bên trong một' VerticalGroup' bên trong một 'Bảng' khác trong 'Giai đoạn' của tôi. Tôi đã làm theo câu trả lời dưới đây, nhưng nó không hoạt động. Vấn đề kết thúc là các yếu tố không được đặt ra trước khi tôi chỉ định vị trí bảng bắt đầu. Không có bản dịch vị trí sân khấu nào trong câu trả lời đó là cần thiết. 'table.getX()' đã cho tôi vị trí trong giai đoạn mà tôi cần một khi tôi đã làm nó sau khi bố cục đã xảy ra. – bazola
@ Jyro117 Cảm ơn lời khuyên đó. Tôi có những vấn đề giống nhau. Mất một thời gian dài để nhận ra rằng tôi có thể tính toán vị trí diễn viên quá sớm. – WeirdElfB0y