2010-12-11 2 views
1

현재 제작중인 게임에는 간단한 엔티티 시스템이 있습니다. CEntity 클래스 (상속, 구성 요소 기반 사용하지 않음) 및 엔터티 관리자가 있습니다.루아 : 내 게임 엔티티 시스템 바인딩 문제

CEntity는 Lable에 메타 테이블을 사용하여 바인딩되며 루아에서 새 엔터티를 만들면 할당 된 사용자 데이터 내에서 C++로 새 엔터티가 만들어집니다.

  • 이 어떻게 (ents.GetByID 같은 것을 구현합니까) :

    는 그래서 좋은 모두 그러나 나는 하나의 큰 문제를 가로 질러 온 것입니까?

ents.GetByID()는 ID가 x 인 엔티티에 대한 참조를 반환해야합니다. 내가 현재하고있는 일 : 새로운 사용자 데이터를 만들고, 기존 엔티티 x의 memcpy()로 채운다.

이것은 분명히 작동하지 않습니다. 첫째, 엔티티 관리자가 엉망입니다. 둘째 : "참조"엔티티를 변경하면 실제 엔티티는 동일하게 유지됩니다. 실제로 두 개의 별도 엔티티가 있습니다.

  • 스택의 기존 userdatum에 대한 참조는 어떻게 푸시합니까?
+0

OP가 질문을 삭제하고 콘텐츠를 삭제하도록 요청했습니다. @ 고양이 : 왜? – Eric

답변

0

기본적으로 루아 레지스트리 내 특정 키 (예 : ID)를 사용자 데이터에 바인딩해야합니다. 또한, memcpy = 나쁜, mmkay?

Lua 레지스트리 테이블을 반환하는 간단한 C 함수를 작성한 경우 루아 쪽에서이 코드를 작성하는 것이 쉽고 간단합니다.

make_entity = function(ID, ...) 
    local entity = CreateEntity(...); 
    get_registry().EntityIDMap[ID] = entity; 
    return entity; 
end 

get_entity = function(ID) 
    return get_registry().EntityIDMap[ID]; 
end