2014-04-01 1 views
0

나는 순간 XNA로 게임을 짓고 있어요 객체, 나는 현재 내 게임 객체의 구성 요소는 다음처럼 설정이 있습니다, 등데이터 저장은

class Character : GameComponent 
{ 
public int health, state; 
public float speed; 
} 

을 메뉴 시스템을 만들기 때문에 I 'DataContainer의 기본 클래스가 있고, 그 다음에 IntContainer, FloatContainer와 같은 하위 클래스가있는 데이터 컨테이너 유형 객체를 가지고 놀았습니다. 하위 클래스에 따라 포함 된 데이터 형식을 반환합니다. 이 메뉴 시스템을 구성 요소에 연결하여 쉽게 편집 할 수 있도록하고 싶습니다. 따라서 구성 요소를 변경하여 명시 적으로 형식화 된 데이터 대신 일반 데이터 컨테이너를 보유하는이 모델을 채택해야하는지 궁금합니다. :

class Character : GameComponent 
{ 
public DataContainer[] data; 

public int health() 
{ 
return (data[0].getValue()); 
} 
} 

나는 아직도 간단한 것 때문에 코드에서 이름 값을 받고, 위와 같이 적절하게 이름이 방법을 계속 할 수있다. 내 엔진을이 데이터 저장 방법으로 바꾸려면 약간의 작업이 필요합니다. 따라서 누군가 입력이 있는지 궁금해하고 있습니다. 더 일반적인 방법이 성능에 어떤 영향을 미칩니 까? 값을 직접 잡는 것보다 값을 얻는 두 가지 방법을 호출하고 있습니까?

+0

이런 식으로 일을하는 데 많은 장단점이 있습니다. 제기 된 바와 같이, 당신의 질문은 의견에 크게 의존하고 매우 광범위합니다. –

+0

충분히 구체적으로 편집하면 충분합니다. – Elliot

답변

0

메서드를 호출하면 필드를 직접 가져 오는 것보다 약간 느려지지만 프레임 당 수백 번 호출하지 않으면 눈에 띄는 효과가 없습니다. (예 : 적용 코드가 무엇이든간에 렌더링 코드, 조명 코드에 getTile(x, y)을 사용하면 안됩니다.) DataContainer을 사용하여 모든 속성이 조금 비 재래 한 것처럼 보이지만 반드시 데이터 직렬화에 유용합니다. .

코드를 복잡하게 만들지 않고 가져오고 설정하는 방법을 추가하는 대신 속성을 사용할 수 있습니다. this tutorial을 살펴보십시오.

속성을 사용하면 일반 변수처럼 보이지만 private 멤버에 대한 액세스를 제어하고 함수를 호출하거나 논리를 계산할 수 있습니다. 여기

는 귀하의 경우 예입니다

public int Health 
{ 
    get 
    { 
     return (data[0].getValue()); 
    } 
    set 
    { 
     data[0].setValue(value); 
    } 
} 

로직을 구현하면서 단순히 속성을 통해 필드를 변경할 수 있습니다이 방법. 앞에서 말했듯이 방법을 사용하면 아주 약간의 시간이 소요될 수 있습니다. 속성은 실제로 두포의 아래에있는 메서드이므로 get 또는 set을 호출하는 것은 메서드를 호출하는 것과 동일합니다. 지정된 멤버에 대해 data 배열을 검색하는 것과 결합하면 매우 빠르지 만 필드만큼 빠르지는 않습니다. 그렇게 말하면, 어떤 지연도 발견해서는 안되지만, 게임이 충분히 크다면 약간의 양이 될 것입니다 (비록 지금 당장 귀찮게해서는 안되지만 실제로는 타일에 색인을 추가하는 경우에만 적용됩니다 배열 또는 무언가, 그냥 생각)

나에게 묻는다면 간단하게 말하면서 프로그램의 필드와 속성을 사용하는 표준 접근 방식을 따르고 사용자 정의 DataContainers를 도입 할 필요가 없습니다. 제 생각에는 당신은 할 필요가 없습니다.

+0

입력을 주셔서 감사합니다. 언제든지 많은 개체가 활성화 될 수 있습니다. 물리학을위한 모든 최적화가 필요하므로 데이터 액세스 속도를 높이고 싶지 않아 과도하게 최적화되지 않았다고 생각합니다. 이것은 몇 가지 문제를 소개하고 실제로 하나만 (메뉴 시스템에 전달할 때 더 깨끗한 코드 만) 해결하기 때문에 필요한 경우 컨테이너에 데이터를 직렬화 및 비 직렬화하는 메소드를 만들 것이라고 생각합니다. – Elliot

관련 문제