PlayRho에서 바디에 대한 "사용자 데이터"를 설정하는 방법은 무엇입니까?

루이스 랑 홀츠

"사용자 데이터"(예 : 내 애플리케이션에 대한 임의의 데이터)를 PlayRho 0.10.0 물리 엔진의 바디와 어떻게 연관시킬 수 있습니까?

에서 Box2D의 2.4.1 물리 엔진, I는 사용하는기구와 "사용자 데이터"연결할 수 userData(A)의 필드 b2BodyDefI는 패스 인스턴스 b2World::CreateBody기능 호출 값을 다시 얻을 b2Body::GetUserData(). PlayRho에서 어떻게합니까?

루이스 랑 홀츠

가능한 해결책:

응용 프로그램에서 요소가 사용자 데이터 값이고 인덱스가 PlayRho 에서 본문을 생성하여 반환 된 기본 값과 일치하는 배열을 사용할 수 있습니다 .

예를 들어 void*호환 가능한 사용자 데이터에 대한 간단하고 순진한 구현 은 다음과 같을 수 있습니다.

int main() {
    struct MyEntity {
        int totalHealth;
        int currentHealth;
        int strength;
        int intellect;
    };

    std::vector<void*> myUserData;

    auto world = World{};

    // If you want to pre-allocate 100 spaces...
    myUserData.resize(100);

    const auto body = world.CreateBody();

    // If your # bodies is unlimited or you don't want to preallocate space...
    if (body.get() >= myUserData.size()) myUserData.resize(body.get());

    // Set your user data...
    myUserData[body.get()] = new MyEntity();

    // Gets your user data...
    const auto myEntity = static_cast<MyEntity*>(myUserData[body.get()]);
    
    // Frees your dynamically allocated MyEntity instances.
    // Even with Box2D `userData` you may want to free these.
    for (const auto& element: myUserDAta) {
        delete element;
    }
    return 0;
}

그러나 메모리 누수와 같은 골칫거리를 다루지 않으려면 myUserData대신 std::vector<MyEntity> myUserData;, new MyEntity()delete element;호출을 피할 수 있습니다.

이것에 대한 몇 가지 장점 :

  • 더 큰 유연성을 제공합니다. 사용자 데이터는 종종 애플리케이션에 따라 다릅니다. PlayRho를 사용할 때이 저장소를 직접 구현하기 때문에 요소를 원하는 유형으로 만드는 것이 더 자유롭고 물리 엔진의 모든 사용이 동일한 사용자 데이터 유형을 갖도록 만들 필요가 없습니다. 예를 들어 사용자 데이터 유형은 세계 특정적일 수 있지만 Box2D에서는 해당 userData필드 의 모든 사용이 동일한 유형을 갖습니다.
  • 메모리 낭비를 방지합니다. 모든 애플리케이션에 사용자 데이터가 필요한 것은 아니므로 메모리를 낭비하지 않거나이를 방지하기 위해 라이브러리 코드를 수정하지 않는 애플리케이션이 있습니다.

단점 :

  • 이것은 Box2D와 다릅니다.
  • 추가 유연성에 신경 쓰지 않는다면 더 많은 코딩 노력이 필요할 수 있습니다 (추가적인 유연성은 코딩 노력도 절약 할 수 있기 때문입니다).

배경 / 설명 :

PlayRho 물리 엔진이 Box2D 물리 엔진의 포크로 시작되었지만 PlayRho는 참조 의미론 (포인터)에서 값 의미론으로 이동했습니다.(값). 따라서 포인터가 교체되었고 "사용자 데이터"는이 가능한 솔루션과 같은 대안을 위해 완전히 제거되었습니다. 또한 값 의미론으로의 전환으로 인해 본문을 만드는 개념은 세계에서 새 본문에 대한 포인터를 가져 오는 것에서 기본적으로 대신 세계에서 새 본문에 대한 정수 인덱스를 가져 오는 것으로 변경되었습니다. 이 인덱스는 세계 내의 새 본문에 대한 식별자 역할을하며 기본적으로 0부터 시작하여 새 본문을 만들 때마다 증가하는 세계에서 증가하는 카운터입니다. 즉, 기본 본문 ID 값을 사용자 데이터를 저장하는 요소에 대한 인덱스로 사용하여 배열에서 O (1) 조회를 수행 할 수 있습니다. 사용std::unordered_map<b2Body*, b2BodyUserData> 또한 O (1) 조회를 제공하지만 해시 된 맵은 배열보다 최신 하드웨어에서 캐시 친화적이지 않은 경향이 있으므로 PlayRho에서보다 바디 당 사용자 데이터 값에 대한 스토리지를 따로 설정하여 Box2D에서 이러한 오버 헤드를 피하는 것이 더 합리적입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Flutter로 사용자 데이터를 검색하고 Firebase에서 검색하는 방법은 무엇입니까?

분류에서Dev

Pytest. XML 보고서에 사용자 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

Android 앱에서 사용자 데이터를 저장하는 방법은 무엇입니까?

분류에서Dev

내 Swing 구성 요소에서 사용자 데이터를 분리하는 방법은 무엇입니까?

분류에서Dev

Custom FreeBSD AMI에서 사용자 데이터 스크립트를 실행하는 방법은 무엇입니까?

분류에서Dev

AWS EC2 사용자 데이터 스크립트에 대한 API 키를 전달하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Windows 스토어 앱 개발에서 복잡한 사용자 데이터를 저장하는 * 올바른 * 방법은 무엇입니까?

분류에서Dev

HWIOAuthBundle Controloler에서 사용자 데이터를 가져 오는 방법은 무엇입니까?

분류에서Dev

"angularx-social-login"에서 개체로 로그인 한 사용자 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

사용자 데이터에 대한 Google API URL은 무엇입니까?

분류에서Dev

각도 js는 사용자 데이터를 airbrake에 주입

분류에서Dev

Electron에서 사용자 데이터를 저장하는 올바른 방법

분류에서Dev

무들에 사용자 지정 사용자 데이터를 저장하는 방법

분류에서Dev

Django : 데이터베이스에서 로그인 한 사용자 데이터를 표시하는 방법

분류에서Dev

Flutter에서 Cloud Fire Store에 사용자 데이터를 저장하는 방법

분류에서Dev

서버의 Google 로그인에서 사용자 데이터를 가져 오는 간단한 방법

분류에서Dev

서버에서 사용자 데이터를 저장하는 방법 불일치

분류에서Dev

Javascript : 웹 앱에서 Google API를 사용하여 * 특정 사용자 * 데이터에 액세스하는 방법은 무엇입니까?

분류에서Dev

boto3에서 입력 한 사용자 데이터를 실행하지 않는 EC2

분류에서Dev

iOS의 Facebook SDK에서 사용자 데이터를 가져 오는 방법

분류에서Dev

Laravel 5.2에서 로그인 사용자 데이터를 보는 방법

분류에서Dev

flutter를 사용하여 firebase에서 displayName과 같은 추가 사용자 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

사용자 데이터를 perl URI 객체에 전달하는 방법

분류에서Dev

사용자 데이터에 대한 내 데이터베이스 디자인은 무엇입니까?

분류에서Dev

API에서 사용자 데이터를 가져와 React 앱에서 사용하는 방법은 무엇입니까?

분류에서Dev

데이터베이스에서 일일 사용자 데이터를 구성하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

나중에 Mac에서 복원하기 위해 Windows 사용자 데이터를 백업하는 방법은 무엇입니까?

분류에서Dev

사용자 데이터를 클라우드에 동기화 / 백업하고 데스크톱에서 액세스하는 방법은 무엇입니까?

분류에서Dev

사용자 데이터에 고유 한 링크를 생성하려면 어떻게합니까?

Related 관련 기사

  1. 1

    Flutter로 사용자 데이터를 검색하고 Firebase에서 검색하는 방법은 무엇입니까?

  2. 2

    Pytest. XML 보고서에 사용자 데이터를 추가하는 방법은 무엇입니까?

  3. 3

    Android 앱에서 사용자 데이터를 저장하는 방법은 무엇입니까?

  4. 4

    내 Swing 구성 요소에서 사용자 데이터를 분리하는 방법은 무엇입니까?

  5. 5

    Custom FreeBSD AMI에서 사용자 데이터 스크립트를 실행하는 방법은 무엇입니까?

  6. 6

    AWS EC2 사용자 데이터 스크립트에 대한 API 키를 전달하는 가장 좋은 방법은 무엇입니까?

  7. 7

    Windows 스토어 앱 개발에서 복잡한 사용자 데이터를 저장하는 * 올바른 * 방법은 무엇입니까?

  8. 8

    HWIOAuthBundle Controloler에서 사용자 데이터를 가져 오는 방법은 무엇입니까?

  9. 9

    "angularx-social-login"에서 개체로 로그인 한 사용자 데이터를 얻는 방법은 무엇입니까?

  10. 10

    사용자 데이터에 대한 Google API URL은 무엇입니까?

  11. 11

    각도 js는 사용자 데이터를 airbrake에 주입

  12. 12

    Electron에서 사용자 데이터를 저장하는 올바른 방법

  13. 13

    무들에 사용자 지정 사용자 데이터를 저장하는 방법

  14. 14

    Django : 데이터베이스에서 로그인 한 사용자 데이터를 표시하는 방법

  15. 15

    Flutter에서 Cloud Fire Store에 사용자 데이터를 저장하는 방법

  16. 16

    서버의 Google 로그인에서 사용자 데이터를 가져 오는 간단한 방법

  17. 17

    서버에서 사용자 데이터를 저장하는 방법 불일치

  18. 18

    Javascript : 웹 앱에서 Google API를 사용하여 * 특정 사용자 * 데이터에 액세스하는 방법은 무엇입니까?

  19. 19

    boto3에서 입력 한 사용자 데이터를 실행하지 않는 EC2

  20. 20

    iOS의 Facebook SDK에서 사용자 데이터를 가져 오는 방법

  21. 21

    Laravel 5.2에서 로그인 사용자 데이터를 보는 방법

  22. 22

    flutter를 사용하여 firebase에서 displayName과 같은 추가 사용자 데이터를 추가하는 방법은 무엇입니까?

  23. 23

    사용자 데이터를 perl URI 객체에 전달하는 방법

  24. 24

    사용자 데이터에 대한 내 데이터베이스 디자인은 무엇입니까?

  25. 25

    API에서 사용자 데이터를 가져와 React 앱에서 사용하는 방법은 무엇입니까?

  26. 26

    데이터베이스에서 일일 사용자 데이터를 구성하는 가장 좋은 방법은 무엇입니까?

  27. 27

    나중에 Mac에서 복원하기 위해 Windows 사용자 데이터를 백업하는 방법은 무엇입니까?

  28. 28

    사용자 데이터를 클라우드에 동기화 / 백업하고 데스크톱에서 액세스하는 방법은 무엇입니까?

  29. 29

    사용자 데이터에 고유 한 링크를 생성하려면 어떻게합니까?

뜨겁다태그

보관