私はキャンバスレーシングゲームをプログラミングしており、イベントを使用して、各ゲームオブジェクトが初期化されて使用できるようになる時期を決定する予定です。最初にオブジェクトにイベントリスナーを追加しようとしましたが、それらはhtml要素にのみアタッチできることに気付きました。回避策として、代わりにウィンドウオブジェクトにリスナーを追加しました。
この問題にイベントを使用する必要があるかどうか、および一般的なパターン/方法がある場合は確認する必要があるかどうかについてアドバイスをいただければ幸いです。オブザーバーパターンを読み上げるつもりでしたが、これはこのシナリオに適していると思われますか?
以下のコードスニペットは、私が現在行っていることを示しています。Trackオブジェクトのすべてのアイテムがロードされると、ウィンドウオブジェクトにアタッチされたイベントリスナーによってキャッチされたイベントがディスパッチされます。
主要:
function game() {
var loadCount = 0;
var itemsToLoad = 10;
window.addEventListener("finishedLoading", itemLoaded, false);
function itemLoaded(event) {
loadCount++;
if(loadCount >= itemsToLoad)
{
gameStateFunction = title;
}
}
}
追跡オブジェクト:
function Track(name, bgTileSheet) {
this.backgroundImage = new Image();
this.itemsLoaded = 0;
this.itemsToLoad = 3;
this.loadedEvent = new CustomEvent("finishedLoading", {
detail: {
objectType: "track"
},
bubbles: true,
cancelable: false
});
this.centerPath = null;
}
Track.prototype.updateLoadProgress = function() {
this.itemsLoaded++;
if(this.itemsLoaded >= this.itemsToLoad)
{
dispatchEvent(this.loadedEvent);
}
};
Track.prototype.init = function() {
//calls loadItems() when XML data is ready
};
Track.prototype.loadItems = function() {
this.loadBackground();
this.loadMapDimensions();
this.loadPaths();
};
Track.prototype.loadBackground = function() {
var self = this;
this.backgroundImage.addEventListener("load",
function() {
self.updateLoadProgress();
},
false);
this.backgroundImage.src = Track.TILESHEET_DIR + this.bgTileSheet;
};