2012-07-05 5 views
1

node.js 서버에서 브라우저 기반 게임을 개발 중입니다. 구성 요소를 기반으로 상속 구조를 구현하려고하지만 자바 스크립트 상속에 관해서 개념이 확실하지 않습니다.자바 스크립트 구성 요소 기반 게임 디자인

내가 할 수있는 한, 두 개의 구성 요소 개체 (예 : function Moves(){}function IsVisible(){}, 일반적인 프로토 타입 상속은 작동하지 않습니다

gameObject.prototype = new Moves; 
gameObject.prototype = new IsVisible; 

IsVisible 객체가 gameObject 프로토 타입으로 Moves 개체를 덮어 씁니다.

다음은 대상 개체와 임의의 수의 구성 요소 개체를 인수로 사용하는 상속 함수를 작성하려는 시도입니다. 그런 다음 대상 객체는 이러한 구성 요소에서 동작 및 변수를 상속받습니다.

저는 자바 스크립트 상속에 익숙하지 않고 아래의 메소드가 자바 스크립트에서 다중 상속 유형 구조를 구현하는 좋은 방법인지 알고 싶습니다.

이 문제를 다루는 잘 정립 된 다른 관행이 있습니까? (문제가있는 경우 ...)

어떤 도움을 주시면 감사하겠습니다.

function inherit(o){ 

    var proto = o; 
    for(var i = 1; i < arguments.length; i++){ 
     var component = new arguments[i](); 
     for(var x in component){ 
      proto[x] = component[x]; 
     } 
    } 
} 

function Player(name){ 

    var o = {}; 
    o.name = name; 
    inherit(o, WorldSpace, Active); 
    return o; 

} 

function WorldSpace(){ 
    this.pos = {x:0, y:0}; 
    this.orientation=0; 
} 

function Active(){ 
    this.acceleration = 1; 
    this.velocity = {x:0,y:0}; 
    this.rotation = 0; 
    this.rotationSpeed = (Math.PI*2)/30; 
    this.throttle = false; 
    this.currentSpeed = 0; 
    this.maxSpeed = 10; 
} 
+0

플레이어를 생성자로 만들고 웹의 모든 곳에서 볼 수있는 전통적인 자바 방식 상속 방법을 사용하십시오. – Bergi

+0

@Bergi Javascript는 다중 상속을 지원하지 않으므로'person.prototype = new WorldSpace; person.prototype = new Active'가 작동하지 않습니다. – RobotEyes

+1

다중 상속을 원하지 않는다. 믹스 인을 원한다. 코드에는 프로토 타입이 없다. AaditMShah 완벽하게 맞습니다. – Bergi

답변

4

귀하의 코드에서 볼 수 있듯이 다중 상속이 필요하지 않습니다. 다른 생성자의 코드를 하나의 코드로 혼합하려고합니다. 이것은 가능하며 실제로 자바 스크립트에서 달성하기 쉽습니다.

우선의이 Player에 대한 귀하의 코드를 다시 작성하자 그것 뿐이다

function Player(name) { 
    this.name = name; 
    WorldSpace.apply(this); 
    Active.apply(this); 
} 

합니다. 간단한 권리? apply 기능이 어떻게 작동하는지 설명해 드리죠 :

  1. 자바 스크립트의 모든 기능은 this라는 특별한 포인터를 가지고있다.
  2. 일반적으로 함수를 호출 할 때 this은 일반적으로 전역 개체를 가리 킵니다 (예 : window).
  3. 키워드가 new 인 함수를 호출하면 JavaScript가 해당 함수의 인스턴스를 만들고 this이 해당 인스턴스를 가리 킵니다.
  4. JavaScript에는 모든 함수의 메서드 인 callapply의 두 가지 함수가 있으며 this 포인터의 값으로 해당 함수를 호출 할 수 있습니다.

그래서 기본적으로 내가 첫 번째 인수로 thisWorldSpace.apply를 호출 할 때 WorldSpace 함수의 this 포인터 Player에서 this 지적한다. 기본적으로 WorldSpaceActive 생성자를 mixins으로 사용하고 있습니다.

JavaScript에서 상속이 작동하는 방식에 대해 자세히 알고 싶다면 answer을 읽어 보시기 바랍니다. 평생을 더 편하게하기 위해 framework을 사용 해본 적이 있습니까?

+0

브릴리언트, 나는 그것을하는 더 좋은 방법이 있어야한다는 것을 알고있었습니다. 나는 핵심 자바 스크립트를 배우는 것에 집중하기 위해 현재 프레임 워크를 고려하지 않고있다. 당신의 도움을 주셔서 감사합니다. – RobotEyes