2012-11-23 2 views
1

캔버스가있는 html5로 게임을 만들고 싶습니다.자바 스크립트의 스크립트 성능

이 변수를 내가 하나

var game = ... 
var car = ... 
var monster = ... 

이 필요하거나 스크립트의 시작 부분에 하나의 var를 인스턴스화하는 것이 좋습니다 각각의 시간을 만들기 위해 더 나은되기 전에

는하지만 성능 질문이 있습니다 수행 도와

var game = {} 
game.car = ... 
game.monster = {} 
game.monster.attack = function(){...} 

감사를

+2

전역 범위에서 변수를 보호하는 한 중요하지 않습니다. 나는 이것에 대해 걱정하지 않을 것이다. 그것은 사소한 미세 최적화이다. – elclanrs

+2

1) http://jsperf.com 2) 정확성을 위해 최적화 한 다음 속도를 높입니다. –

+2

차이가있을 경우 사용자는이를 알 수 없습니다. –

답변

3

댓글에서 볼 수 있듯이 너무 많이 궁금 할 필요가 없습니다. 자바 스크립트 게임 프로그래밍을 할 때 가장 큰 것은 하드웨어가 다른 컴퓨터를 사용한다는 것입니다. 따라서 당신이 엔진을 보간하지 않으면 프레임 속도는 모두 다를 것입니다. 예를 들어

// Updated drawing code for our objects 
Rect.prototype.draw = function(context, interpolation) { 
    context.fillRect(this.x, this.y + this.velocity * interpolation, 30, 30); 
}; 

Game.draw = function(interpolation) { 
    this.context.clearRect(0, 0, 640, 480); 

    for (var i=0; i < this.entities.length; i++) { 
    this.entities[i].draw(this.context, interpolation); 
    } 
}; 

Game.run = (function() { 
    var loops = 0, skipTicks = 1000/Game.fps, 
     maxFrameSkip = 10, 
     nextGameTick = (new Date).getTime(), 
     lastGameTick; 

    return function() { 
    loops = 0; 

    while ((new Date).getTime() > nextGameTick) { 
     Game.update(); 
     nextGameTick += skipTicks; 
     loops++; 
    } 

    if (!loops) { 
     Game.draw((nextGameTick - (new Date).getTime())/skipTicks); 
    } else { 
     Game.draw(0); 
    } 
    }; 
})(); 

이 게임 논리를 Game.fps에 유지합니다. 당신이 피하고 싶은 또 다른 일은 드로잉 로직에서 jQuery를 사용하는 것입니다. 이것은 jQuery의 애니메이션 대기열이 매우 느리고 애니메이션이 무한대로 쌓여 결국 모든 프레임에서 더 큰 지연을 제공하기 때문입니다.

2

차이가 너무 작아서 무시할 수 있습니다. 일반적으로 통역사는 백그라운드에서 이러한 미세 최적화를 수행 할 수 있습니다. 집중해야 할 것은 알고리즘입니다.

게임 개발 경험 기준은 다음과 같습니다. 성능 병목 현상은 항상 그래픽 엔진입니다. 그것이 최적화되어야합니다. 과도한 그림 그리기, 재 드로잉 피하기, 무적의 물건 그리기, 캐시, 캐시, 캐시 방지.

2

이 테스트 (http://jsperf.com/to-scope-or-not-to-scope)는 로컬 범위를 사용하여 멀리 갈 수있는 가장 빠른 방법입니다 것을 보여 주지만, 단지 로 자기 호출 함수를 만드는 오프셋 그것보다 범위가 더 있습니다.

당신이 할 수있는 최선의 방법은 당신이 가지고있는 범위를 사용하는 것입니다. 성능상의 최악의 경우 (성능이 현저한 경우) 엄격한 루프 내에서 자체 호출 함수를 사용하는 것입니다 (반복 변수를 닫거나 새 함수를 작성하려는 경우에도 수행해야합니다). 어쨌든). 다른 것은 로컬 범위를 사용하는 것보다 sligthly 느립니다.

자바 스크립트는 이 아니며은 블록 스코핑을 사용합니다. - var iable의 캡쳐 기능은 scoped입니다.

그래픽 작업의 오버 헤드가 아닌 그래픽 작업의 수를 최소화해야합니다.

또한 프로그램을 유지 관리 할 수 ​​있는지 확인한 다음 성능을 고려해야합니다.