Created
May 1, 2014 09:22
-
-
Save wise9/c799eae2816f1da33ab6 to your computer and use it in GitHub Desktop.
enchant.js extension for soubun.9leap.net
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @fileOverview | |
* soubun.nineleap.enchant.js | |
* @version 0.0.1 (2014/05/01) | |
* @requires enchant.js v0.6.3 or later | |
* | |
* @description | |
* enchant.js extension for soubun.9leap.net | |
* soubun.9leap.net 向けの enchant.js 拡張プラグイン。 | |
* いばらき総文2014コンピュータ部門プログラミングコンテスト専用の9leapプラグインです。 | |
* core.end の引数にスコアと結果の文字列を渡すことで、ランキングに登録できる。 | |
* (9leapにアップロードした後のみランキング画面にジャンプする) | |
* | |
* @usage | |
* | |
* var core = new Core(320, 320); | |
* | |
* core.onload = function(){ | |
* // executed after player pushed "START" | |
* // ... | |
* if(some.condition)core.end(score, result); | |
* }; | |
* | |
* core.start(); | |
*/ | |
(function() { | |
/** | |
* @type {Object} | |
*/ | |
enchant.nineleap = { assets: ['start.png', 'end.png'] }; | |
/** | |
* @scope enchant.nineleap.Core.prototype | |
*/ | |
enchant.nineleap.Core = enchant.Class.create(enchant.Core, { | |
/** | |
* start, gameover の画像を表示し、 | |
* 最後にスコアを送信するように拡張された Core クラス | |
* @param width | |
* @param height | |
* @constructs | |
*/ | |
initialize: function(width, height) { | |
enchant.Core.call(this, width, height); | |
this.addEventListener('load', function() { | |
var core = this; | |
this.startScene = new enchant.nineleap.SplashScene(); | |
this.startScene.image = this.assets['start.png']; | |
this.startScene.addEventListener('touchend', function() { | |
if (core.started === false) { | |
if (core.onstart != null) { | |
core.onstart(); | |
} | |
core.started = true; | |
coreStart = true; // deprecated | |
} | |
if (core.currentScene === this) { | |
core.popScene(); | |
} | |
this.removeEventListener('touchend', arguments.callee); | |
}); | |
this.addEventListener('keydown', function() { | |
if (this.started === false) { | |
if (this.onstart != null) { | |
this.onstart(); | |
} | |
this.started = true; | |
} | |
if (core.currentScene === core.startScene) { | |
core.popScene(); | |
} | |
this.removeEventListener('keydown', arguments.callee); | |
}); | |
this.pushScene(this.startScene); | |
this.endScene = new SplashScene(); | |
this.endScene.image = this.assets['end.png']; | |
this.removeEventListener('load', arguments.callee); | |
}); | |
this.scoreQueue = false; | |
this.started = false; | |
coreStart = false; // deprecated | |
}, | |
_requestPreload: function() { | |
var o = {}; | |
var loaded = 0, | |
len = 0, | |
loadFunc = function() { | |
var e = new enchant.Event('progress'); | |
e.loaded = ++loaded; | |
e.total = len; | |
enchant.Core.instance.loadingScene.dispatchEvent(e); | |
}; | |
this._assets | |
.concat(this._twitterAssets || []) | |
.concat(this._netpriceData || []) | |
.concat(this._memoryAssets || []) | |
.reverse() | |
.forEach(function(asset) { | |
var src, name; | |
if (asset instanceof Array) { | |
src = asset[0]; | |
name = asset[1]; | |
} else { | |
src = name = asset; | |
} | |
if (!o[name]) { | |
o[name] = this.load(src, name, loadFunc); | |
len++; | |
} | |
}, this); | |
this.pushScene(this.loadingScene); | |
return enchant.Deferred.parallel(o); | |
}, | |
end: function(score, result, img) { | |
if (img !== undefined) { | |
this.endScene.image = img; | |
} | |
this.pushScene(this.endScene); | |
if (location.hostname === 'soubun.9leap.net') { | |
var submit = function() { | |
var id = location.pathname.match(/^\/jsgames\/+games\/(\d+)/)[1]; | |
location.replace([ | |
'http://soubun.9leap.net/games/', id, '/result', | |
'?score=', encodeURIComponent(score), | |
'&result=', encodeURIComponent(result) | |
].join('')); | |
}; | |
this.endScene.addEventListener('touchend', submit); | |
window.setTimeout(submit, 3000); | |
} | |
enchant.Core.instance.end = function() { | |
}; | |
} | |
}); | |
/** | |
* @scope enchant.nineleap.SplashScene.prototype | |
*/ | |
enchant.nineleap.SplashScene = enchant.Class.create(enchant.Scene, { | |
/** | |
* @extends enchant.Scene | |
* @constructs | |
* スプラッシュ画像を表示するシーン。 | |
*/ | |
initialize: function() { | |
enchant.Scene.call(this); | |
}, | |
/** | |
* 中央に表示する画像 | |
* @type {enchant.Surface} | |
*/ | |
image: { | |
get: function() { | |
return this._image; | |
}, | |
set: function(image) { | |
this._image = image; | |
// discard all child nodes | |
while (this.firstChild) { | |
this.removeChild(this.firstChild); | |
} | |
// generate an Sprite object and put it on center | |
var sprite = new Sprite(image.width, image.height); | |
sprite.image = image; | |
sprite.x = (this.width - image.width) / 2; | |
sprite.y = (this.height - image.height) / 2; | |
this.addChild(sprite); | |
} | |
} | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment