/** * @project JSDK: JavaScript Development Kit * @copyright Copyright (c) 2004-2012, Dragonfly.org. All rights reserved. * @license LGPLv3 * * @version 0.1 * @author fengchun * @date 2012-02-27 */ var SYS = js.lang.System, D = js.core.Dom, $ = js.core.Dom.$, E = js.core.Event, MT = js.math.MathTool, G2D = js.math.Geom2D, F = js.phys.Formulas; SYS.namespace('js.game.demo.warcraft2'); js.game.demo.warcraft2.Warrior = function(config){ this.state = config['state']; this.side = config['side']; js.game.demo.warcraft2.Warrior.superclass.constructor.apply(this, arguments); }; SYS.extend(js.game.demo.warcraft2.Warrior, js.game.Sprite, { init: function(game){ this._setFrameKey(); this.paint(game.getCanvas()); }, _setFrameKey: function(){ var dir = this.getDir(), num = Math.floor(dir/MT.RADIAN_2); this.setFrameSeqKey(this.state + num); } }); js.game.demo.warcraft2.Game = function(config){ js.game.demo.warcraft2.Game.superclass.constructor.apply(this, arguments); }; SYS.extend(js.game.demo.warcraft2.Game, js.game.Game, { _newWarrior: function(config){ return new js.game.demo.warcraft2.Warrior({ side:config['side'],state:config['state']||'stand' ,imageSrc:'../../images/warcraft2/'+config['side']+'/'+config['name']+'.png' ,x:config['x'],y:config['y'],dir:config['dir'],width:72,height:72 ,frameSeqs:{ stand6:[[0,0]] ,stand7:[[72,0]] ,stand0:[[144,0]] ,stand1:[[216,0]] ,stand2:[[288,0]] ,stand3:[[360,0]] ,stand4:[[432,0]] ,stand5:[[504,0]] ,walk6:[[0,0],[0,72],[0,144],[0,216],[0,288]] ,walk7:[[72,0],[72,72],[72,144],[72,216],[72,288]] ,walk0:[[144,0],[144,72],[144,144],[144,216],[144,288]] ,walk1:[[216,0],[216,72],[216,144],[216,216],[216,288]] ,walk2:[[288,0],[288,72],[288,144],[288,216],[288,288]] ,walk3:[[360,0],[360,72],[360,144],[360,216],[360,288]] ,walk4:[[432,0],[432,72],[432,144],[432,216],[432,288]] ,walk5:[[504,0],[504,72],[504,144],[504,216],[504,288]] ,fight6:[[0,360],[0,432],[0,504],[0,576]] ,fight7:[[72,360],[72,432],[72,504],[72,576]] ,fight0:[[144,360],[144,432],[144,504],[144,576]] ,fight1:[[216,360],[216,432],[216,504],[216,576]] ,fight2:[[288,360],[288,432],[288,504],[288,576]] ,fight3:[[360,360],[360,432],[360,504],[360,576]] ,fight4:[[432,360],[432,432],[432,504],[432,576]] ,fight5:[[504,360],[504,432],[504,504],[504,576]] } }) }, _paint8Orc: function(center, r, state){ for(var i=0;i<8;i++){ var xy = F.round(i, [center[0]+r,center[1]], center, r*MT.RADIAN_2), player = this._newWarrior({ side:'orc',name:'axethrower' ,x:xy[0],y:xy[1],dir:i*MT.RADIAN_2,state:state }); player.init(this); this._players.push(player); } }, init: function(){ this.subscribe('ended', function(){ this.getCanvas().destory(); }) this._players = []; this._paint8Orc([200,100], 70, 'stand'); this._paint8Orc([200,300], 70, 'walk'); this._paint8Orc([200,500], 70, 'fight'); }, run: function(){ this._players.forEach(function(player){ player.nextFrame(); player.paint(this.getCanvas()); }, this) } }); js.game.demo.warcraft2.GameApp = function(){ var game = null; return { main: function(btn){ if(!game) { var height = 700, y = D.getY(btn) - height; game = new js.game.demo.warcraft2.Game({ id:'warcraft2',x:400,y:y,background:'black',width:500,height:height,fpsMax:12 }); game.watchFPS(true); game.init(); } game.start(); }, end: function(){ if(!game) return; game.end(); } } }();