Tại sao sprite của tôi được hiển thị bù từ thân Box2D của nó?


7

Tôi phát hiện ra điều này bằng cách sử dụng trình kết xuất gỡ lỗi. Khi trò chơi bắt đầu, mọi thứ đều theo thứ tự. Nhưng khi va chạm xảy ra, vòng quay của sprite lớn hơn cơ thể của nó. Sprite và cơ thể phù hợp khi cơ thể hoàn toàn nằm ngang.

sprite với cơ thể Box2D phác thảo như lớp phủ

Nguồn gốc xoay của sprite dường như rất xa so với nơi cần có. Đây là mã của tôi:

Sprite sprite = data.sprite;
position = body.getPosition();
sprite.setPosition(
    position.x - sprite.getWidth()  / 2,
    position.y - sprite.getHeight() / 2
);
sprite.setOrigin(position.x, position.y);
sprite.setRotation(MathUtils.radiansToDegrees * body.getAngle());

Như bạn có thể thấy, tôi thậm chí đang cố gắng thiết lập trung tâm vòng quay của nó setOriginmà không thành công. Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


9

Hầu hết các API đại diện cho nguồn gốc của Sprite trong không gian cục bộ, không phải trong không gian thế giới. Điều này được hỗ trợ bởi tài liệu của libgdx trong đó nêu rõ:

Sprite cũng có nguồn gốc xung quanh việc quay và chia tỷ lệ được thực hiện (nghĩa là gốc không được sửa đổi bằng cách xoay và chia tỷ lệ). Các nguồn gốc được đưa ra liên quan đến góc dưới bên trái của Sprite, vị trí của nó .

Vì vậy, tôi nghĩ rằng nếu bạn muốn các phép quay xảy ra xung quanh tâm của sprite, bạn nên sử dụng nguồn gốc sau:

sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);

Bạn thực sự rất nhanh. Bạn nói đúng về setOrigin. Đó là mẹo. Cảm ơn rất nhiều! BTW, câu lệnh setP vị trí nên từ tôi. Bạn cần đặt điểm góc cho vị trí sprite.
Tae-Sung Shin

@Paul Tôi nhận thấy vấn đề và chỉnh sửa bài viết của tôi nhưng bạn đã nhận xét. :) Trong một số API, nguồn gốc cũng ảnh hưởng đến dịch thuật (đó là lý do ban đầu tôi đã viết một setPocation khác) nhưng sau đó tôi đã kiểm tra tài liệu và phát hiện ra rằng đó không phải là trường hợp với libgdx nên setPocation của bạn là chính xác.
David Gouveia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.