2013-10-16 4 views
1

canvs를 사용하여 JS에서 간단한 2 차원 게임을 만들고 있습니다.사용자 정의 객체/유형 자바 스크립트

게임은 고블린을 죽이기 위해 돌아 다니는 기사로 이루어져 있습니다. 고블린은 한 번 만진 후, 깡패 위치로 재설정됩니다. 죽은 모든 고블린에게 피를 남기고 싶습니다.

현재 캔버스를 다시 그리기 전에 고블린이 죽은 곳의 이전 X 및 Y 좌표를 사용하여 혈액이 튀는 이미지를 페인트합니다.

모든 고블린을 위해하고 싶습니다. Java와 같은 전통적인 언어에서는 X와 Y의 두 속성을 가진 "blood"와 같은 유형을 정의 할 것입니다.

그러면 고블린의 현재 좌표를 사용하여 매 라운드마다이 유형의 새 인스턴스를 만듭니다. 그런 다음이 유형을 배열에 추가하면 루프하고 배열의 모든 객체를 인쇄합니다.

저는 JS에 상당히 익숙하며 함수형 언어이기 때문에 상황이 조금 다릅니다. 내가 게임의 매 반복마다 배열에 "새로운"수있는 유형을 정확히 정의 할 수 있을까요?

var blood = { 
    x: 0, 
    y: 0   
}; 

는 여기에 당신은 함수로 자바 스크립트에서 "클래스"를 만들

답변

1

가 현재 혈액 객체입니다. 함수 내에서 this.x를 사용하면 x라는 멤버 변수를 만드는 것과 같습니다 :

var Blood = function() { 
    this.x = 0; 
    this.y = 0; 
} 
var blood = new Blood() 
console.log(blood.x); 

이러한 클래스 나 유형이 자바와 같은 객체 지향 언어, 자바 스크립트의 범위 지정 규칙을 사용하여 그들을 흉내 단지 방법의 의미에 있지 않습니다.

지금까지는 실제로 여기서는별로 유용하지 않습니다. 단순한 객체 맵이 제대로 작동합니다. 자바 스크립트에 대한 자세한 내용은

Blood.prototype.createSplatter = function() { 
    return [this.x-1, this.y+1]; // (idk, however you create a splatter) 
}; 
blood.createSplatter(); 

(Fiddle)

: 당신이 등, 멤버 함수처럼 혈액 "클래스"에 더 많은 논리가 필요하지만이 방법은 객체의 프로토 타입을 수정하여 당신은 사람들을 만들 유용 할 수 있습니다 클래스들, 나는 CoffeeScript syntax ("Classes, Inheritance, and Super"까지 스크롤 다운)을 살펴볼 것을 제안합니다. 그들은 단순화 된 CS 구문과 JS 번역의 클래스에 대한 몇 가지 병행 사례를 가지고 있습니다.

+0

'createBlood'에 의해 반환 된 객체에'.splatter' 메소드를 효율적으로 추가 할 수 없기 때문에? ;-) – Alnitak

+0

@Alnitak 그렇지만'.splatter'는 객체의 인스턴스간에 공유되지 않습니다 ... – McGarnagle

+0

그것이 내 포인트였습니다. 프로토 타입에있는 경우 공유되었지만 반환 할 경우 {x :, y : , splatter : function (...)}'그렇지 않을 것입니다. – Alnitak

관련 문제