ホームページ ウェブフロントエンド H5 チュートリアル HTML5ゲームフレームワーク cnGameJS開発記録 - コア機能モジュールのコード例

HTML5ゲームフレームワーク cnGameJS開発記録 - コア機能モジュールのコード例

Mar 24, 2017 pm 04:05 PM

ディレクトリに戻る

1.cnGameJsフレームワークコード構成

Core関数モジュール、主な機能はその後のフレームワーク開発とゲームのユーザー開発に利便性を提供することですフレームワーク全体はグローバルスコープの汚染を避けるために密閉されたパッケージ。その後、それぞれの異なるモジュールが独自のクロージャ内に置かれ、異なるモジュールの分離がより明確になります。したがって、フレームワークのモジュール分割は次のようになります:

(function(win,undefined){//最大的闭包

var fun1=function(){//各模块公用的方法
}

//这里放各个小模块,它们有各自的闭包

}(window,undefined)
ログイン後にコピー

それでは、他の小さなモジュールをどのように分割すればよいでしょうか?それぞれの小さなモジュールが独自の 名前空間 と独自のクロージャ を持つことを容易にするために、異なる名前空間 で独自のモジュールを展開できる register メソッドを追加しました。最初に渡す必要があるのは次の名前です。このメソッドは名前空間オブジェクトを生成します。次に、独自のメソッドを実行して、名前空間オブジェクトに対応する拡張操作を実行します:

/**
         *生成命名空间,并执行相应操作
        **/
        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]]==&#39;undefined&#39;)&&(parent[nsArr[i]]={});
                parent=parent[nsArr[i]];
            }
            if(func){
                func.call(parent,this);    
            }
            return parent;
        }
ログイン後にコピー

上と同様に、最初に受信した名前空間 string を分割し、次にオブジェクトを生成します。次に、展開操作のためにユーザーが渡した関数を次のように実行します:

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. フレームワークの初期化

フレームワークが初期化されるとき、保存する必要があるオブジェクトは次のとおりです: canvas オブジェクト、コンテキスト オブジェクト、キャンバスの位置、サイズなど。初期化関数を見てください:

/**
         *初始化
        **/
        init:function(id,options){
            options=options||{};
            this.canvas = this.core.$(id||"canvas");    
            this.context = this.canvas.getContext(&#39;2d&#39;);
            this.width = options.width||800;
            this.height = options.height||600;
            this.title = this.core.$$(&#39;title&#39;)[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 メソッドを呼び出していることに注目してください。このパラメーターはループしてオブジェクトの offsetsetParent を取得し、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. ツール関数モジュール

その後、上記の register メソッドを使用して最初のモジュールであるコア モジュールを追加できます。このモジュールも非常にシンプルで、その主な機能は、その後のフレームワーク開発とユーザー ゲーム開発を容易にするツール機能を追加することです。 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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

See all articles