2011-03-09 2 views
2

Gamemaker는 좋은 RAD를 허용하는 깔끔한 도구입니다. 그러나 그것은 몇 가지 단점이 있습니다. 그 중 하나는 훌륭한 표준 라이브러리가 없다는 것입니다.
사실 "ds_ *"유형 멤버가 있지만 그 멤버는 매우 부족합니다. 예를 들어 우선 순위 큐는 읽기 전용 유형 (프로세스에서 소멸)입니다. 목록에 대한 정렬 기능은 끔찍한 느린 방법을 사용합니다. (공식적으로는 언급하지는 않았지만, 거품 정렬을 사용한다고 생각합니다.) 그리고 링크 된 목록을위한 메소드에는 빌드가 없습니다. 그 단순한 회원 액세스의 꼭대기에해야 할 것보다 느립니다.gamemaker가 C++ 표준 라이브러리를 처리하도록 래퍼 DLL 만들기

이제 실제로 이러한 것들을 모국어로 만들 수 있습니다. 그러나 그것은 매우 느립니다 (통역사가 느려짐). 나는. quicksort/heapsort를 작성하는 것은 많은 경우 내장 된 정렬보다 느립니다. 내 자신의 "연결 목록"(각 노드에 대한 특수 개체 사용)을 작성하는 것은 너무 많은 오버 헤드가있었습니다. (gamemaker의 각 객체는 각 단계마다 많은 일을합니다.)

이제 표준 라이브러리의 C++ 레이어를 작성하려고합니다. 더 나은 알고리즘을 허용 할뿐만 아니라 몇 가지 추가 기능 (해시 테이블 & 연결된 목록이 주요 대상 임)을 추가하기를 바랍니다. 대부분의 문제들에 대해서는 이미 큰 문제를 제외하고 어떻게 대처해야하는지에 대한 아이디어가 있습니다.

모든 C++ 라이브러리는 항목을 식별하기 위해 "반복자"를 사용합니다. Gamemaker는 doule (또는 c-style 문자 배열)을 dll과주고받을 수 있습니다.
어떻게이 문제를 피할 수 있습니까? 항목의 인덱스를 반환하지 않는 것은 매우 어리 석다. 따라서이 반복자를 double에 매핑하는 방법을 찾아야한다.

이 용도로 좋은 아이디어가 있습니까? 필자는 모든 데이터 구조를 간단히 다시 작성하는 것이 가장 좋기 때문에 이터레이터는 1 대 1 맵을 두 배로 확보 할 수 있습니다 (실제로는 두 배 + 데이터 구조 인덱스). 아니면 더 좋은 방법이 있습니까?

p.s. 게임 메이커가 왜 아직 태그하지 않았습니까?

답변

2

Game Maker에서 변수에 데이터 구조를 "저장"하는 유일한 방법은 핸들 또는 ID입니다. 내장 데이터 구조를 사용하는 것은 정수를 사용하는 것과 똑같습니다.

내가 시도하는 방법은 해시 테이블에 ID와 함께 데이터 구조에 대한 모든 포인터를 저장하는 것입니다. 그런 다음 GameMaker는 요청하지 않는 한 데이터 구조의 상태를 알 필요가 없으므로 GM과 DLL간에 ID를 전달합니다.

관련 문제