2010-07-09 3 views
2

현재 C# .net XNA 게임 엔진을 개발 중입니다.동적 속성을 가진 게임 엔진 디자인

나는 엔진의 디자인에 대해 궁금해했다. 우선 내 엔진이 내 자신의 스크립팅 언어를 통합 할 수있게하고 싶습니다. 이렇게하려면 게임의 모든 개체의 모든 속성이나 변경하고 싶은 모든 속성에 액세스 할 수 있어야한다고 생각했습니다.

내가 처음 시작한 일은 문자열로 액세스 할 수있게하려는 것입니다. 그렇게하기 위해 모든 "엔터티"를 만들었습니다. 화면에 그려지는 모든 항목에는 그 안에 모든 속성의 사전이 있습니다. 속성 추가는 Entity 클래스에서 수동으로 수행되었습니다. 나는 많은 사전을 가지고 있지만 GC에 속도가 느릴 수있는 것들이 많지 않을 때부터 읽었다. 나는 지금 내 게임에서 무슨 일이 일어나고 있는지를 믿는다. fps를 잃기 시작하기 전에 기본 속성 (예 : 색상, 위치, 질감)이있는 약 1000 개의 엔티티 만 가져올 수 있습니다.

사전보다 속도가 느리기 때문에 내가하고있는 일이나 리플렉션을 사용하는 것 외에 다른 방법으로 동적으로 객체의 속성에 액세스 할 수 있는지 궁금합니다. 아니면 전체 디자인을 다시 생각해야합니까?

답변

2

자바와 함께 스크립팅 언어로 자바 스크립트를 사용 했는데도 이와 비슷한 작업을 수행했습니다.

기본적으로 스크립팅 언어에 개체를 직접 노출시키는 방식으로 작동했습니다. 스크립트 언어에서 직접 클래스의 메서드를 호출 할 수 있어야합니다. 그래서 나는 이상한 동적 속성 해킹을 구현하는 이유를 실제로 볼 수 없습니다.

+0

개체를 스크립팅 언어에 노출하면 무엇을 의미합니까? –

+0

대부분의 임베디드 스크립팅 언어를 사용하면 특정 객체를 스크립트에 표시 할 수 있습니다. 기본적으로 "이 C# 개체를 이름이 X 인 스크립트에서 사용할 수있게 만듭니다."라고 말합니다. 그런 다음 C#에서와 같이 스크립트에서 X를 사용할 수 있고 X의 메서드에 액세스 할 수 있습니다. –

2

런타임 컴파일을 살펴보고 C#을 사용하여 스크립트를 작성할 수 있습니다. 스크립트에 대한 표준 인터페이스를 정의하면 this과 유사하게 엔진이 실행 중일 때 스크립트를 읽고 컴파일하고 실행할 수 있습니다.

+0

좋은 스크립트 시스템은 다음과 같습니다. http://www.csscript.net/ –

+0

저는이 답장의 링크 저자입니다. C#을 스크립팅 언어로 사용하여 큰 성공을 거두었습니다. C#/Visual Studio의 모든 기능을 제공하면서 스크립트에서 액세스 할 수있는 내용을 구체적으로 제어 할 수 있습니다. 스크립트가 특정 인터페이스를 통해 내 게임 객체에 액세스 할 수있게함으로써 변경할 수있는 것과 불가능할 수있는 것에 대한 제어권을가집니다. –