2011-01-26 4 views
3

currect 게임 프로젝트에 스크립트 가능한 NPC를 넣어야합니다. 프로젝트 자체는 C++ 언어로 개발되었습니다. Luabind를 사용하여 루아와 C++를 묶을 것입니다.게임 NPC 멀티 액션 루아 스크립트 디자인

특정 NPC 클릭 또는 타이머가 활성화 될 때 NPC 기능을 호출해야합니다. 현재 2 개의 NPC 스크립트 디자인 사이에 갇혀 있습니다.

  1. 모든 NPC를 구분하기 위해 일종의 npcname_action을 사용합니다.
    이것은 모든 다른 NPC에게 이름을 부여하는 일종의 성가신 일입니다.
    나는 아직도 내 프로젝트에서 이것을 구현하는 방법을 생각하고있다.
    예 :

    HotelBellboy12_Click() { .. } 
    HotelBellboy12_TimerAction() { .. } 
    
  2. 함수의 이름을 사용.
    모든 npc에는 자체 lua 파일이 있습니다.
    나는 메모리에 스크립트를로드 할 생각하고 때 필요는 luaL_loadbuffer
    예 사용 luaState에로드됩니다 : 하나 더 이유

    OnClick() { .. } 
    OnTimerAction() { .. } 
    

를?

+2

http://gamedev.stackexchange.com/으로 이동해야합니다. – Ither

답변

1

. 지도가로드되면 모든 NPC 데이터가 포함 된 구성 Lua 파일을로드합니다. 그 중에는 NPC에 사용되는 스크립트 파일의 이름이 있습니다.

게임에서 NPC를로드해야 할 때 루아 파일을 컴파일합니다. NPC는 '모델'NPC 유형을 사용하여 NPC 구성에 지정된 공통 작동 (예 : 판매자 유형 또는 공통 유형)의 대부분을 지시 할 수 있습니다. 이러한 모델 유형은 클릭 할 때 거래 창을 제공하는 것과 같은 모든 기본 기능을 제공합니다. 특정 NPC가 OnClick()과 같은 기능을 사용하여 모델을 재정의하고 사용자 정의 처리기를 제공합니다.

게임이 커지면 많은 양의 스크립트가 끝나지 만 꽤 잘 돌아갔습니다.

3

다른 디자인을 사용할 수도 있습니다.

테이블 키와 값은 모든 유형이 될 수 있다는 점을 이용하십시오.

npc가 모든 NPC를 포함하는 테이블이라고 가정 해 보겠습니다. 그것의 열쇠는 NPC의 이름이고 그 값은 또 다른 표입니다. 이 다른 테이블 키는 작업이며 값은이 작업의 기능입니다. 당신이 밥이 타이머 후 울고 앨리스를 클릭했을 때 이동하고 싶은 경우 그래서, 간단하게 수행 내가 전에 이런 짓을 한 내가 당신의 # 2 옵션으로 비슷한 사용

npc.bob.click = function() jump() end 
npc.alice.timer = function() cry() end 
+0

여전히 고유 한 이름이 필요합니다. –