HTML5 게임 프레임워크 cnGameJS 개발 기록 - 핵심 기능 모듈의 코드 예시
디렉토리로 돌아가기
1.cnGameJs 프레임워크 코드 구성
핵심기능 모듈의 주요 기능은 후속 프레임워크 개발과 사용자 게임 개발을 용이하게 하는 것입니다. 전역 범위의 오염을 방지하기 위해 전체 프레임워크가 폐쇄되어 있습니다. 그 후에는 각각의 서로 다른 모듈이 자체적으로 닫히므로 서로 다른 모듈의 분리가 더 명확해집니다. 따라서 우리 프레임워크의 모듈 분할은 다음과 같습니다.
(function(win,undefined){//最大的闭包 var fun1=function(){//各模块公用的方法 } //这里放各个小模块,它们有各自的闭包 }(window,undefined)
그렇다면 다른 작은 모듈은 어떻게 분할할까요? 각각의 작은 모듈이 자신만의 네임스페이스 와 자체 클로저 를 갖도록 하기 위해, 우리는 서로 다른 네임스페이스 에서 자체 모듈을 확장할 수 있는 등록 메소드를 추가했습니다. 전달해야 하는 것은 네임스페이스의 이름입니다. 이 메소드는 네임스페이스 객체를 생성한 다음 자체 메소드를 실행하여 네임스페이스 객체에 대한 해당 확장 작업을 수행합니다.
/** *生成命名空间,并执行相应操作 **/ register:function(nameSpace,func){ var nsArr=nameSpace.split("."); var parent=win; for(var i=0,len=nsArr.length;i<len;i++){ (typeof parent[nsArr[i]]=='undefined')&&(parent[nsArr[i]]={}); parent=parent[nsArr[i]]; } if(func){ func.call(parent,this); } return parent; }
위와 같이 먼저 들어오는 네임스페이스 문자열 을 분할한 다음 개체를 생성할 수 있고 사용자가 전달한 함수를 다음과 같이 확장 작업을 위해 실행할 수 있습니다.
cnGame.register("cnGame.core",function(){this.func=function(){}});
이런 식으로 핵심 모듈을 생성하고 모듈에 func 메소드를 추가하면 프레임워크의 코드 구성은 다음과 같습니다.
(function(win,undefined){ var cnGame={ register:function(nameSpace,handler){ } } /*core模块*/ cnGame.register("core",function(){ //添加该模块内容 }) /*input模块*/ cnGame.register("input",function(){ //添加该模块内容 }) win["cnGame"]=cnGame; })(window,undefined);
2. 프레임워크
프레임워크 초기화 , 저장해야 할 개체는 캔버스 개체, 컨텍스트 개체, 캔버스 위치, 크기 등입니다. 먼저 초기화를 살펴볼 수 있습니다. 함수:
/** *初始化 **/ init:function(id,options){ options=options||{}; this.canvas = this.core.$(id||"canvas"); this.context = this.canvas.getContext('2d'); this.width = options.width||800; this.height = options.height||600; this.title = this.core.$$('title')[0]; canvasPos=getCanvasPos(this.canvas); this.x=canvasPos[0]||0; this.y=canvasPos[1]||0; this.canvas.width=this.width; this.canvas.height=this.height; this.canvas.style.left=this.x +"px"; this.canvas.style.top=this.y +"px"; },
매우 간단합니다. 나중에 사용할 수 있도록 일부 초기화 값을 저장하면 됩니다. 또한, 캔버스의 위치 매개변수를 가져오기 위해 getCanvasPos 메소드를 호출한 것을 알 수 있습니다. 이 매개변수는 객체의 offsetParent를 가져오기 위해 반복하고, offsetLeft와 offsetTop을 중첩하여 캔버스의 위치를 가져옵니다. 페이지에서. 이 함수의 소스 코드는 다음과 같습니다:
/** *获取canvas在页面的位置 **/ var getCanvasPos=function(canvas){ var left = 0; var top = 0; while (canvas.offsetParent) { left += canvas.offsetLeft; top += canvas.offsetTop; canvas = canvas.offsetParent; } return [left, top]; }
3. 도구 함수 모듈
그 후 위의 등록 방법을 사용하여 첫 번째 모듈을 추가할 수 있습니다. 기준 치수. 이 모듈의 주요 기능은 후속 프레임워크 개발 및 사용자 게임 개발을 용이하게 하는 도구 기능을 추가하는 것입니다. 다음은 ID별 요소 가져오기, 프로토타입 상속 , 객체 복사 , 이벤트 바인딩 등 일반적으로 사용되는 도구 기능입니다. 참고로, 다른 브라우저와 호환성 문제가 있는 경우, 매번 브라우저 유형을 판단하는 대신 처음부터 브라우저에 따라 기능을 설정한 다음 해당 작업을 수행할 수 있으므로 더욱 효율적입니다. 이벤트 바인딩을 예로 들어보겠습니다.
/** 事件绑定 **/ this.bindHandler=(function(){ if(window.addEventListener){ return function(elem,type,handler){ elem.addEventListener(type,handler,false); } } else if(window.attachEvent){ return function(elem,type,handler){ elem.attachEvent("on"+type,handler); } } })();
브라우저 특성에 따라 다른 기능을 미리 반환하므로 이후 사용 시 브라우저 특성을 판단할 필요가 없으며 효율성이 향상됩니다.
첨부된 모든 도구 기능의 소스 코드는 매우 간단하므로 모듈에 대해서는 자세히 설명하지 않습니다.
아아아아위 내용은 HTML5 게임 프레임워크 cnGameJS 개발 기록 - 핵심 기능 모듈의 코드 예시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.
