diff --git a/html5/Arthur/cocos2d.js b/html5/Arthur/cocos2d.js
new file mode 100755
index 0000000..3d9a234
--- /dev/null
+++ b/html5/Arthur/cocos2d.js
@@ -0,0 +1,90 @@
+/****************************************************************************
+ Copyright (c) 2010-2012 cocos2d-x.org
+ Copyright (c) 2008-2010 Ricardo Quesada
+ Copyright (c) 2011 Zynga Inc.
+
+ http://www.cocos2d-x.org
+
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ ****************************************************************************/
+(function () {
+ var d = document;
+ var c = {
+ COCOS2D_DEBUG:2, //0 to turn debug off, 1 for basic debug, and 2 for full debug
+ box2d:true,
+ chipmunk:true,
+ showFPS:true,
+ frameRate:60,
+ loadExtension:true,
+ renderMode:0, //Choose of RenderMode: 0(default), 1(Canvas only), 2(WebGL only)
+ tag:'gameCanvas', //the dom element to run cocos2d on
+ engineDir:'../cocos2d/',
+ //SingleEngineFile:'',
+ appFiles:[
+ 'src/resource.js',
+ 'src/GameConfig.js', // 配置
+ 'src/HudLayer.js', // 控制
+ 'src/Characters.js', // 人物
+ 'src/KeyMap.js', // 键盘映射
+ 'src/Joypad.js', // 摇杆控制器
+ 'src/ActionButton.js', // 按钮
+ 'src/GameLayer.js', // 游戏层
+ 'src/Loading.js' // 自定义加载界面
+ ]
+ };
+
+ if(!d.createElement('canvas').getContext){
+ var s = d.createElement('div');
+ s.innerHTML = '
Your browser does not support HTML5 canvas! ' +
+ 'Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.Click the logo to download.
' +
+ ' ';
+ var p = d.getElementById(c.tag).parentNode;
+ p.style.background = 'none';
+ p.style.border = 'none';
+ p.insertBefore(s);
+
+ d.body.style.background = '#ffffff';
+ return;
+ }
+
+ window.addEventListener('DOMContentLoaded', function () {
+ //first load engine file if specified
+ var s = d.createElement('script');
+ /*********Delete this section if you have packed all files into one*******/
+ if (c.SingleEngineFile && !c.engineDir) {
+ s.src = c.SingleEngineFile;
+ }
+ else if (c.engineDir && !c.SingleEngineFile) {
+ s.src = c.engineDir + 'platform/jsloader.js';
+ }
+ else {
+ alert('You must specify either the single engine file OR the engine directory in "cocos2d.js"');
+ }
+ /*********Delete this section if you have packed all files into one*******/
+
+ //s.src = 'Packed_Release_File.js'; //IMPORTANT: Un-comment this line if you have packed all files into one
+
+ document.ccConfig = c;
+ s.id = 'cocos2d-html5';
+ d.body.appendChild(s);
+ //else if single file specified, load singlefile
+ });
+})();
+
diff --git a/html5/Arthur/index.html b/html5/Arthur/index.html
new file mode 100755
index 0000000..fd6a657
--- /dev/null
+++ b/html5/Arthur/index.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Cocos2d-html5 Hello World test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/html5/Arthur/main.js b/html5/Arthur/main.js
new file mode 100755
index 0000000..a9dac9f
--- /dev/null
+++ b/html5/Arthur/main.js
@@ -0,0 +1,67 @@
+/****************************************************************************
+ Copyright (c) 2010-2012 cocos2d-x.org
+ Copyright (c) 2008-2010 Ricardo Quesada
+ Copyright (c) 2011 Zynga Inc.
+
+ http://www.cocos2d-x.org
+
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ ****************************************************************************/
+var cocos2dApp = cc.Application.extend({
+ config:document['ccConfig'],
+ ctor:function (scene) {
+ this._super();
+ this.startScene = scene;
+ cc.COCOS2D_DEBUG = this.config['COCOS2D_DEBUG'];
+ cc.initDebugSetting();
+ cc.setup(this.config['tag']);
+ cc.AppController.shareAppController().didFinishLaunchingWithOptions();
+ },
+ applicationDidFinishLaunching:function () {
+ if(cc.RenderDoesnotSupport()){
+ //show Information to user
+ alert("Browser doesn't support WebGL");
+ return false;
+ }
+ // initialize director
+ var director = cc.Director.getInstance();
+
+ // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
+ //director.enableRetinaDisplay(true);
+
+ // turn on display FPS
+ director.setDisplayStats(this.config['showFPS']);
+
+ // set FPS. the default value is 1.0/60 if you don't call this
+ director.setAnimationInterval(1.0 / this.config['frameRate']);
+
+ //load resources
+ Loading.preload(g_resources, function () {
+ // cc.LoaderScene.preload(g_resources, function () {
+ director.replaceScene(new this.startScene());
+ }, this);
+ // Loading.preload(g_resources, function () {
+ // director.replaceScene(new this.startScene());
+ // }, this);
+
+ return true;
+ }
+});
+var myApp = new cocos2dApp(GameLayer.scene);
diff --git a/html5/Arthur/proj.org b/html5/Arthur/proj.org
new file mode 100644
index 0000000..454c600
--- /dev/null
+++ b/html5/Arthur/proj.org
@@ -0,0 +1,71 @@
+* 王者之剑 Demo
+
+* todo list
+
+** DONE 英雄血条状态
+ CLOSED: [2013-08-19 Mon 15:52]
+
+** DONE 怪物血条状态
+ CLOSED: [2013-08-22 Thu 09:26]
+
+** DONE 血条状态封装实现
+ CLOSED: [2013-08-22 Thu 09:26]
+ 实现英雄和怪物的通用封装
+
+** DONE 人物走动位置边界判断
+ CLOSED: [2013-08-20 Tue 11:04]
+
+** TODO 怪物自动攻击 AI
+
+** DONE 人物动作封装
+ CLOSED: [2013-08-22 Thu 09:26]
+
+** TODO 怪物动作封装实现
+
+** DONE 特效攻击冷冻
+ CLOSED: [2013-08-22 Thu 09:26]
+
+** DONE 攻击按钮实现效果
+ CLOSED: [2013-08-22 Thu 09:26]
+ 完成 API 调用
+
+** 攻击按钮键盘映射
+ CLOSED: [2013-08-20 Tue 14:58]
+
+** DONE 状态 标题
+ CLOSED: [2013-08-22 Thu 14:11]
+ 如 "吾名一叶" "锤子兵" 的 Title
+
+** DONE 层级检测
+ CLOSED: [2013-08-22 Thu 13:39]
+多层游戏元素,更具位置判断前后关系
+
+** DONE 掉血动作
+ CLOSED: [2013-08-22 Thu 16:59]
+一个数字往上升
+
+** TODO 跳跃的位置检测
+需要排除跳跃攻击的 边界检测,否则落地错误
+
+** DONE 打击范围判断
+ CLOSED: [2013-08-23 Fri 09:47]
+当然还有打击方向
+打击前设定当前“打击对象”的攻击区域,和被打击对象的区域
+还需要判断是否在同一个高度,打击对象与被打击对象所在的 y 轴差,在一定值之内
+
+** DONE 掉血延迟
+ CLOSED: [2013-08-23 Fri 09:47]
+
+** DONE 血条跟随掉血
+ CLOSED: [2013-08-23 Fri 11:26]
+
+** TODO 不同动作之间过度不流畅
+
+** TODO 简单 AI
+实现怪物自动攻击
+
+* Html5 问题
+BMF 不能使用 FadeOut
+
+* 美术资源总结
+同样人物,或者元素,动画使用相同大小图片
diff --git a/html5/Arthur/res/Attack.png b/html5/Arthur/res/Attack.png
new file mode 100644
index 0000000..5436405
Binary files /dev/null and b/html5/Arthur/res/Attack.png differ
diff --git a/html5/Arthur/res/AttackA.png b/html5/Arthur/res/AttackA.png
new file mode 100644
index 0000000..11a80aa
Binary files /dev/null and b/html5/Arthur/res/AttackA.png differ
diff --git a/html5/Arthur/res/AttackB.png b/html5/Arthur/res/AttackB.png
new file mode 100644
index 0000000..08bad57
Binary files /dev/null and b/html5/Arthur/res/AttackB.png differ
diff --git a/html5/Arthur/res/AttackFreeze.png b/html5/Arthur/res/AttackFreeze.png
new file mode 100644
index 0000000..4a54ea0
Binary files /dev/null and b/html5/Arthur/res/AttackFreeze.png differ
diff --git a/html5/Arthur/res/AttackO.png b/html5/Arthur/res/AttackO.png
new file mode 100644
index 0000000..988d6a1
Binary files /dev/null and b/html5/Arthur/res/AttackO.png differ
diff --git a/html5/Arthur/res/BackGround.png b/html5/Arthur/res/BackGround.png
new file mode 100644
index 0000000..720791d
Binary files /dev/null and b/html5/Arthur/res/BackGround.png differ
diff --git a/html5/Arthur/res/CloseNormal.png b/html5/Arthur/res/CloseNormal.png
new file mode 100755
index 0000000..5657a13
Binary files /dev/null and b/html5/Arthur/res/CloseNormal.png differ
diff --git a/html5/Arthur/res/CloseSelected.png b/html5/Arthur/res/CloseSelected.png
new file mode 100755
index 0000000..e4c82da
Binary files /dev/null and b/html5/Arthur/res/CloseSelected.png differ
diff --git a/html5/Arthur/res/HelloWorld.png b/html5/Arthur/res/HelloWorld.png
new file mode 100755
index 0000000..3a20f25
Binary files /dev/null and b/html5/Arthur/res/HelloWorld.png differ
diff --git a/html5/Arthur/res/Hero1.png b/html5/Arthur/res/Hero1.png
new file mode 100755
index 0000000..2932374
Binary files /dev/null and b/html5/Arthur/res/Hero1.png differ
diff --git a/html5/Arthur/res/Hero2.png b/html5/Arthur/res/Hero2.png
new file mode 100755
index 0000000..9fabce4
Binary files /dev/null and b/html5/Arthur/res/Hero2.png differ
diff --git a/html5/Arthur/res/Hero3.png b/html5/Arthur/res/Hero3.png
new file mode 100755
index 0000000..0dae6d2
Binary files /dev/null and b/html5/Arthur/res/Hero3.png differ
diff --git a/html5/Arthur/res/HeroAttack1.png b/html5/Arthur/res/HeroAttack1.png
new file mode 100644
index 0000000..221bbb5
Binary files /dev/null and b/html5/Arthur/res/HeroAttack1.png differ
diff --git a/html5/Arthur/res/HeroAttack2.png b/html5/Arthur/res/HeroAttack2.png
new file mode 100644
index 0000000..a1954ae
Binary files /dev/null and b/html5/Arthur/res/HeroAttack2.png differ
diff --git a/html5/Arthur/res/HeroAttack3.png b/html5/Arthur/res/HeroAttack3.png
new file mode 100644
index 0000000..8ca9cb2
Binary files /dev/null and b/html5/Arthur/res/HeroAttack3.png differ
diff --git a/html5/Arthur/res/HeroAttack4.png b/html5/Arthur/res/HeroAttack4.png
new file mode 100644
index 0000000..d2a0647
Binary files /dev/null and b/html5/Arthur/res/HeroAttack4.png differ
diff --git a/html5/Arthur/res/HeroAttack5.png b/html5/Arthur/res/HeroAttack5.png
new file mode 100644
index 0000000..06fabfc
Binary files /dev/null and b/html5/Arthur/res/HeroAttack5.png differ
diff --git a/html5/Arthur/res/HeroAttackJ1.png b/html5/Arthur/res/HeroAttackJ1.png
new file mode 100644
index 0000000..d588c59
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ1.png differ
diff --git a/html5/Arthur/res/HeroAttackJ2.png b/html5/Arthur/res/HeroAttackJ2.png
new file mode 100644
index 0000000..88e7fa8
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ2.png differ
diff --git a/html5/Arthur/res/HeroAttackJ3.png b/html5/Arthur/res/HeroAttackJ3.png
new file mode 100644
index 0000000..5aca464
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ3.png differ
diff --git a/html5/Arthur/res/HeroAttackJ4.png b/html5/Arthur/res/HeroAttackJ4.png
new file mode 100644
index 0000000..b134e64
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ4.png differ
diff --git a/html5/Arthur/res/HeroAttackJ5.png b/html5/Arthur/res/HeroAttackJ5.png
new file mode 100644
index 0000000..bceff9f
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ5.png differ
diff --git a/html5/Arthur/res/HeroAttackJ6.png b/html5/Arthur/res/HeroAttackJ6.png
new file mode 100644
index 0000000..0819818
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ6.png differ
diff --git a/html5/Arthur/res/HeroAttackJ7.png b/html5/Arthur/res/HeroAttackJ7.png
new file mode 100644
index 0000000..db10eed
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ7.png differ
diff --git a/html5/Arthur/res/HeroAttackJ8.png b/html5/Arthur/res/HeroAttackJ8.png
new file mode 100644
index 0000000..fae8723
Binary files /dev/null and b/html5/Arthur/res/HeroAttackJ8.png differ
diff --git a/html5/Arthur/res/HeroAttackT1.png b/html5/Arthur/res/HeroAttackT1.png
new file mode 100644
index 0000000..c5b9064
Binary files /dev/null and b/html5/Arthur/res/HeroAttackT1.png differ
diff --git a/html5/Arthur/res/HeroAttackT2.png b/html5/Arthur/res/HeroAttackT2.png
new file mode 100644
index 0000000..6d73f6b
Binary files /dev/null and b/html5/Arthur/res/HeroAttackT2.png differ
diff --git a/html5/Arthur/res/HeroAttackT3.png b/html5/Arthur/res/HeroAttackT3.png
new file mode 100644
index 0000000..94deddc
Binary files /dev/null and b/html5/Arthur/res/HeroAttackT3.png differ
diff --git a/html5/Arthur/res/HeroRun1.png b/html5/Arthur/res/HeroRun1.png
new file mode 100755
index 0000000..7230c09
Binary files /dev/null and b/html5/Arthur/res/HeroRun1.png differ
diff --git a/html5/Arthur/res/HeroRun10.png b/html5/Arthur/res/HeroRun10.png
new file mode 100755
index 0000000..52ab27b
Binary files /dev/null and b/html5/Arthur/res/HeroRun10.png differ
diff --git a/html5/Arthur/res/HeroRun11.png b/html5/Arthur/res/HeroRun11.png
new file mode 100755
index 0000000..a7b9d85
Binary files /dev/null and b/html5/Arthur/res/HeroRun11.png differ
diff --git a/html5/Arthur/res/HeroRun2.png b/html5/Arthur/res/HeroRun2.png
new file mode 100755
index 0000000..a6713ef
Binary files /dev/null and b/html5/Arthur/res/HeroRun2.png differ
diff --git a/html5/Arthur/res/HeroRun3.png b/html5/Arthur/res/HeroRun3.png
new file mode 100755
index 0000000..c3f89a7
Binary files /dev/null and b/html5/Arthur/res/HeroRun3.png differ
diff --git a/html5/Arthur/res/HeroRun4.png b/html5/Arthur/res/HeroRun4.png
new file mode 100755
index 0000000..52ab27b
Binary files /dev/null and b/html5/Arthur/res/HeroRun4.png differ
diff --git a/html5/Arthur/res/HeroRun5.png b/html5/Arthur/res/HeroRun5.png
new file mode 100755
index 0000000..a7b9d85
Binary files /dev/null and b/html5/Arthur/res/HeroRun5.png differ
diff --git a/html5/Arthur/res/HeroRun6.png b/html5/Arthur/res/HeroRun6.png
new file mode 100755
index 0000000..148f099
Binary files /dev/null and b/html5/Arthur/res/HeroRun6.png differ
diff --git a/html5/Arthur/res/HeroRun7.png b/html5/Arthur/res/HeroRun7.png
new file mode 100755
index 0000000..e017c70
Binary files /dev/null and b/html5/Arthur/res/HeroRun7.png differ
diff --git a/html5/Arthur/res/HeroRun8.png b/html5/Arthur/res/HeroRun8.png
new file mode 100755
index 0000000..1355a5d
Binary files /dev/null and b/html5/Arthur/res/HeroRun8.png differ
diff --git a/html5/Arthur/res/HeroRun9.png b/html5/Arthur/res/HeroRun9.png
new file mode 100755
index 0000000..7d17eeb
Binary files /dev/null and b/html5/Arthur/res/HeroRun9.png differ
diff --git a/html5/Arthur/res/HeroState1.png b/html5/Arthur/res/HeroState1.png
new file mode 100644
index 0000000..81ffb3d
Binary files /dev/null and b/html5/Arthur/res/HeroState1.png differ
diff --git a/html5/Arthur/res/HeroState2.png b/html5/Arthur/res/HeroState2.png
new file mode 100644
index 0000000..651da72
Binary files /dev/null and b/html5/Arthur/res/HeroState2.png differ
diff --git a/html5/Arthur/res/HeroState3.png b/html5/Arthur/res/HeroState3.png
new file mode 100644
index 0000000..4a71709
Binary files /dev/null and b/html5/Arthur/res/HeroState3.png differ
diff --git a/html5/Arthur/res/HeroState4.png b/html5/Arthur/res/HeroState4.png
new file mode 100644
index 0000000..569dcae
Binary files /dev/null and b/html5/Arthur/res/HeroState4.png differ
diff --git a/html5/Arthur/res/Joypad1.png b/html5/Arthur/res/Joypad1.png
new file mode 100644
index 0000000..4d0a137
Binary files /dev/null and b/html5/Arthur/res/Joypad1.png differ
diff --git a/html5/Arthur/res/Joypad2.png b/html5/Arthur/res/Joypad2.png
new file mode 100644
index 0000000..c3989bd
Binary files /dev/null and b/html5/Arthur/res/Joypad2.png differ
diff --git a/html5/Arthur/res/Joypad3.png b/html5/Arthur/res/Joypad3.png
new file mode 100644
index 0000000..5ef4965
Binary files /dev/null and b/html5/Arthur/res/Joypad3.png differ
diff --git a/html5/Arthur/res/Joypad4.png b/html5/Arthur/res/Joypad4.png
new file mode 100644
index 0000000..a5b862e
Binary files /dev/null and b/html5/Arthur/res/Joypad4.png differ
diff --git a/html5/Arthur/res/Robot1.png b/html5/Arthur/res/Robot1.png
new file mode 100644
index 0000000..e8f855d
Binary files /dev/null and b/html5/Arthur/res/Robot1.png differ
diff --git a/html5/Arthur/res/Robot2.png b/html5/Arthur/res/Robot2.png
new file mode 100644
index 0000000..0ba7da1
Binary files /dev/null and b/html5/Arthur/res/Robot2.png differ
diff --git a/html5/Arthur/res/Robot3.png b/html5/Arthur/res/Robot3.png
new file mode 100644
index 0000000..7bb3d3a
Binary files /dev/null and b/html5/Arthur/res/Robot3.png differ
diff --git a/html5/Arthur/res/RobotAttack1.png b/html5/Arthur/res/RobotAttack1.png
new file mode 100644
index 0000000..2a999d2
Binary files /dev/null and b/html5/Arthur/res/RobotAttack1.png differ
diff --git a/html5/Arthur/res/RobotAttack2.png b/html5/Arthur/res/RobotAttack2.png
new file mode 100644
index 0000000..2faa027
Binary files /dev/null and b/html5/Arthur/res/RobotAttack2.png differ
diff --git a/html5/Arthur/res/RobotAttack3.png b/html5/Arthur/res/RobotAttack3.png
new file mode 100644
index 0000000..dd32e0d
Binary files /dev/null and b/html5/Arthur/res/RobotAttack3.png differ
diff --git a/html5/Arthur/res/RobotAttack4.png b/html5/Arthur/res/RobotAttack4.png
new file mode 100644
index 0000000..5f5f866
Binary files /dev/null and b/html5/Arthur/res/RobotAttack4.png differ
diff --git a/html5/Arthur/res/RobotAttack5.png b/html5/Arthur/res/RobotAttack5.png
new file mode 100644
index 0000000..5875d4a
Binary files /dev/null and b/html5/Arthur/res/RobotAttack5.png differ
diff --git a/html5/Arthur/res/RobotRun1.png b/html5/Arthur/res/RobotRun1.png
new file mode 100644
index 0000000..43aae3a
Binary files /dev/null and b/html5/Arthur/res/RobotRun1.png differ
diff --git a/html5/Arthur/res/RobotRun2.png b/html5/Arthur/res/RobotRun2.png
new file mode 100644
index 0000000..3a32630
Binary files /dev/null and b/html5/Arthur/res/RobotRun2.png differ
diff --git a/html5/Arthur/res/RobotRun3.png b/html5/Arthur/res/RobotRun3.png
new file mode 100644
index 0000000..09f77b0
Binary files /dev/null and b/html5/Arthur/res/RobotRun3.png differ
diff --git a/html5/Arthur/res/RobotRun4.png b/html5/Arthur/res/RobotRun4.png
new file mode 100644
index 0000000..5ce4d6d
Binary files /dev/null and b/html5/Arthur/res/RobotRun4.png differ
diff --git a/html5/Arthur/res/RobotRun5.png b/html5/Arthur/res/RobotRun5.png
new file mode 100644
index 0000000..a244839
Binary files /dev/null and b/html5/Arthur/res/RobotRun5.png differ
diff --git a/html5/Arthur/res/RobotRun6.png b/html5/Arthur/res/RobotRun6.png
new file mode 100644
index 0000000..57c6813
Binary files /dev/null and b/html5/Arthur/res/RobotRun6.png differ
diff --git a/html5/Arthur/res/RobotState1.png b/html5/Arthur/res/RobotState1.png
new file mode 100644
index 0000000..b1f7c99
Binary files /dev/null and b/html5/Arthur/res/RobotState1.png differ
diff --git a/html5/Arthur/res/RobotState2.png b/html5/Arthur/res/RobotState2.png
new file mode 100644
index 0000000..90e4674
Binary files /dev/null and b/html5/Arthur/res/RobotState2.png differ
diff --git a/html5/Arthur/res/RobotState3.png b/html5/Arthur/res/RobotState3.png
new file mode 100644
index 0000000..2d179ab
Binary files /dev/null and b/html5/Arthur/res/RobotState3.png differ
diff --git a/html5/Arthur/res/RobotState4.png b/html5/Arthur/res/RobotState4.png
new file mode 100644
index 0000000..be838f9
Binary files /dev/null and b/html5/Arthur/res/RobotState4.png differ
diff --git a/html5/Arthur/res/favicon.ico b/html5/Arthur/res/favicon.ico
new file mode 100755
index 0000000..1ad6a09
Binary files /dev/null and b/html5/Arthur/res/favicon.ico differ
diff --git a/html5/Arthur/res/fonts/futura-48.fnt b/html5/Arthur/res/fonts/futura-48.fnt
new file mode 100755
index 0000000..50d6e48
--- /dev/null
+++ b/html5/Arthur/res/fonts/futura-48.fnt
@@ -0,0 +1,182 @@
+info face="Futura-CondensedExtraBold" size=48 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=2,2
+common lineHeight=62 base=48 scaleW=512 scaleH=256 pages=1 packed=0
+page id=0 file="futura-48.png"
+chars count=95
+char id=92 x=2 y=2 width=35 height=56 xoffset=0 yoffset=7 xadvance=32 page=0 chnl=0 letter="\"
+char id=47 x=39 y=2 width=35 height=56 xoffset=-1 yoffset=7 xadvance=32 page=0 chnl=0 letter="/"
+char id=125 x=76 y=2 width=22 height=56 xoffset=-1 yoffset=7 xadvance=19 page=0 chnl=0 letter="}"
+char id=123 x=100 y=2 width=21 height=56 xoffset=1 yoffset=7 xadvance=19 page=0 chnl=0 letter="{"
+char id=40 x=123 y=2 width=19 height=56 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=0 letter="("
+char id=41 x=144 y=2 width=19 height=56 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=0 letter=")"
+char id=91 x=165 y=2 width=19 height=56 xoffset=2 yoffset=7 xadvance=18 page=0 chnl=0 letter="["
+char id=93 x=186 y=2 width=19 height=56 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=0 letter="]"
+char id=106 x=207 y=2 width=16 height=55 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="j"
+char id=36 x=225 y=2 width=24 height=52 xoffset=3 yoffset=5 xadvance=28 page=0 chnl=0 letter="$"
+char id=124 x=251 y=2 width=15 height=50 xoffset=7 yoffset=10 xadvance=27 page=0 chnl=0 letter="|"
+char id=81 x=268 y=2 width=33 height=46 xoffset=0 yoffset=10 xadvance=31 page=0 chnl=0 letter="Q"
+char id=100 x=303 y=2 width=28 height=45 xoffset=0 yoffset=7 xadvance=26 page=0 chnl=0 letter="d"
+char id=98 x=333 y=2 width=28 height=45 xoffset=1 yoffset=7 xadvance=26 page=0 chnl=0 letter="b"
+char id=107 x=363 y=2 width=29 height=44 xoffset=1 yoffset=7 xadvance=26 page=0 chnl=0 letter="k"
+char id=63 x=394 y=2 width=28 height=44 xoffset=1 yoffset=8 xadvance=27 page=0 chnl=0 letter="?"
+char id=104 x=424 y=2 width=27 height=44 xoffset=1 yoffset=7 xadvance=26 page=0 chnl=0 letter="h"
+char id=102 x=453 y=2 width=21 height=44 xoffset=-1 yoffset=7 xadvance=16 page=0 chnl=0 letter="f"
+char id=33 x=476 y=2 width=16 height=44 xoffset=2 yoffset=8 xadvance=17 page=0 chnl=0 letter="!"
+char id=108 x=494 y=2 width=14 height=44 xoffset=1 yoffset=7 xadvance=13 page=0 chnl=0 letter="l"
+char id=37 x=2 y=60 width=39 height=43 xoffset=0 yoffset=9 xadvance=37 page=0 chnl=0 letter="%"
+char id=105 x=43 y=60 width=16 height=43 xoffset=0 yoffset=8 xadvance=13 page=0 chnl=0 letter="i"
+char id=64 x=61 y=60 width=38 height=42 xoffset=1 yoffset=10 xadvance=37 page=0 chnl=0 letter="@"
+char id=38 x=101 y=60 width=36 height=42 xoffset=1 yoffset=10 xadvance=34 page=0 chnl=0 letter="&"
+char id=79 x=139 y=60 width=33 height=42 xoffset=0 yoffset=10 xadvance=30 page=0 chnl=0 letter="O"
+char id=71 x=174 y=60 width=32 height=42 xoffset=0 yoffset=10 xadvance=30 page=0 chnl=0 letter="G"
+char id=48 x=208 y=60 width=31 height=42 xoffset=0 yoffset=10 xadvance=28 page=0 chnl=0 letter="0"
+char id=85 x=241 y=60 width=30 height=42 xoffset=1 yoffset=10 xadvance=29 page=0 chnl=0 letter="U"
+char id=51 x=273 y=60 width=29 height=42 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="3"
+char id=54 x=304 y=60 width=29 height=42 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="6"
+char id=53 x=335 y=60 width=29 height=42 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="5"
+char id=56 x=366 y=60 width=29 height=42 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="8"
+char id=103 x=397 y=60 width=28 height=42 xoffset=0 yoffset=21 xadvance=26 page=0 chnl=0 letter="g"
+char id=112 x=427 y=60 width=28 height=42 xoffset=1 yoffset=21 xadvance=26 page=0 chnl=0 letter="p"
+char id=113 x=457 y=60 width=28 height=42 xoffset=0 yoffset=21 xadvance=26 page=0 chnl=0 letter="q"
+char id=67 x=2 y=105 width=26 height=42 xoffset=0 yoffset=10 xadvance=24 page=0 chnl=0 letter="C"
+char id=83 x=30 y=105 width=24 height=42 xoffset=0 yoffset=10 xadvance=21 page=0 chnl=0 letter="S"
+char id=74 x=56 y=105 width=21 height=42 xoffset=-1 yoffset=10 xadvance=19 page=0 chnl=0 letter="J"
+char id=87 x=79 y=105 width=45 height=41 xoffset=-1 yoffset=10 xadvance=40 page=0 chnl=0 letter="W"
+char id=77 x=126 y=105 width=43 height=41 xoffset=0 yoffset=10 xadvance=41 page=0 chnl=0 letter="M"
+char id=65 x=171 y=105 width=33 height=41 xoffset=-1 yoffset=10 xadvance=28 page=0 chnl=0 letter="A"
+char id=86 x=206 y=105 width=32 height=41 xoffset=-1 yoffset=10 xadvance=28 page=0 chnl=0 letter="V"
+char id=88 x=240 y=105 width=32 height=41 xoffset=-1 yoffset=10 xadvance=28 page=0 chnl=0 letter="X"
+char id=90 x=274 y=105 width=32 height=41 xoffset=-1 yoffset=10 xadvance=27 page=0 chnl=0 letter="Z"
+char id=89 x=308 y=105 width=31 height=41 xoffset=-1 yoffset=10 xadvance=27 page=0 chnl=0 letter="Y"
+char id=52 x=341 y=105 width=31 height=41 xoffset=0 yoffset=10 xadvance=28 page=0 chnl=0 letter="4"
+char id=75 x=374 y=105 width=31 height=41 xoffset=1 yoffset=10 xadvance=29 page=0 chnl=0 letter="K"
+char id=82 x=407 y=105 width=31 height=41 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="R"
+char id=55 x=440 y=105 width=31 height=41 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="7"
+char id=68 x=473 y=105 width=30 height=41 xoffset=1 yoffset=10 xadvance=29 page=0 chnl=0 letter="D"
+char id=78 x=2 y=149 width=30 height=41 xoffset=1 yoffset=10 xadvance=30 page=0 chnl=0 letter="N"
+char id=50 x=34 y=149 width=30 height=41 xoffset=0 yoffset=10 xadvance=28 page=0 chnl=0 letter="2"
+char id=66 x=66 y=149 width=30 height=41 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="B"
+char id=72 x=98 y=149 width=29 height=41 xoffset=1 yoffset=10 xadvance=29 page=0 chnl=0 letter="H"
+char id=80 x=129 y=149 width=29 height=41 xoffset=1 yoffset=10 xadvance=27 page=0 chnl=0 letter="P"
+char id=57 x=160 y=149 width=29 height=41 xoffset=1 yoffset=10 xadvance=28 page=0 chnl=0 letter="9"
+char id=121 x=191 y=149 width=29 height=41 xoffset=-1 yoffset=21 xadvance=24 page=0 chnl=0 letter="y"
+char id=35 x=222 y=149 width=27 height=41 xoffset=2 yoffset=10 xadvance=28 page=0 chnl=0 letter="#"
+char id=84 x=251 y=149 width=25 height=41 xoffset=-1 yoffset=10 xadvance=20 page=0 chnl=0 letter="T"
+char id=69 x=278 y=149 width=23 height=41 xoffset=1 yoffset=10 xadvance=22 page=0 chnl=0 letter="E"
+char id=70 x=303 y=149 width=22 height=41 xoffset=1 yoffset=10 xadvance=21 page=0 chnl=0 letter="F"
+char id=76 x=327 y=149 width=22 height=41 xoffset=1 yoffset=10 xadvance=20 page=0 chnl=0 letter="L"
+char id=49 x=351 y=149 width=18 height=41 xoffset=6 yoffset=10 xadvance=28 page=0 chnl=0 letter="1"
+char id=73 x=371 y=149 width=15 height=41 xoffset=1 yoffset=10 xadvance=14 page=0 chnl=0 letter="I"
+char id=60 x=388 y=149 width=29 height=39 xoffset=1 yoffset=11 xadvance=28 page=0 chnl=0 letter="<"
+char id=62 x=419 y=149 width=29 height=39 xoffset=1 yoffset=11 xadvance=28 page=0 chnl=0 letter=">"
+char id=59 x=450 y=149 width=20 height=39 xoffset=-2 yoffset=21 xadvance=14 page=0 chnl=0 letter=";"
+char id=116 x=472 y=149 width=20 height=37 xoffset=-1 yoffset=14 xadvance=16 page=0 chnl=0 letter="t"
+char id=111 x=2 y=192 width=28 height=31 xoffset=0 yoffset=21 xadvance=26 page=0 chnl=0 letter="o"
+char id=97 x=32 y=192 width=28 height=31 xoffset=0 yoffset=21 xadvance=26 page=0 chnl=0 letter="a"
+char id=101 x=62 y=192 width=28 height=31 xoffset=0 yoffset=21 xadvance=26 page=0 chnl=0 letter="e"
+char id=117 x=92 y=192 width=27 height=31 xoffset=1 yoffset=21 xadvance=27 page=0 chnl=0 letter="u"
+char id=115 x=121 y=192 width=24 height=31 xoffset=0 yoffset=21 xadvance=21 page=0 chnl=0 letter="s"
+char id=99 x=147 y=192 width=19 height=31 xoffset=0 yoffset=21 xadvance=16 page=0 chnl=0 letter="c"
+char id=58 x=168 y=192 width=16 height=31 xoffset=0 yoffset=21 xadvance=14 page=0 chnl=0 letter=":"
+char id=119 x=186 y=192 width=41 height=30 xoffset=-1 yoffset=21 xadvance=37 page=0 chnl=0 letter="w"
+char id=109 x=229 y=192 width=40 height=30 xoffset=1 yoffset=21 xadvance=39 page=0 chnl=0 letter="m"
+char id=120 x=271 y=192 width=30 height=30 xoffset=-1 yoffset=21 xadvance=26 page=0 chnl=0 letter="x"
+char id=118 x=303 y=192 width=29 height=30 xoffset=-1 yoffset=21 xadvance=24 page=0 chnl=0 letter="v"
+char id=110 x=334 y=192 width=27 height=30 xoffset=1 yoffset=21 xadvance=26 page=0 chnl=0 letter="n"
+char id=122 x=363 y=192 width=26 height=30 xoffset=0 yoffset=21 xadvance=23 page=0 chnl=0 letter="z"
+char id=114 x=391 y=192 width=21 height=30 xoffset=1 yoffset=21 xadvance=18 page=0 chnl=0 letter="r"
+char id=43 x=414 y=192 width=29 height=29 xoffset=1 yoffset=16 xadvance=28 page=0 chnl=0 letter="+"
+char id=42 x=445 y=192 width=25 height=24 xoffset=3 yoffset=7 xadvance=28 page=0 chnl=0 letter="*"
+char id=94 x=472 y=192 width=31 height=23 xoffset=-1 yoffset=10 xadvance=27 page=0 chnl=0 letter="^"
+char id=44 x=2 y=225 width=19 height=22 xoffset=-2 yoffset=38 xadvance=14 page=0 chnl=0 letter=","
+char id=34 x=23 y=225 width=24 height=20 xoffset=0 yoffset=10 xadvance=22 page=0 chnl=0 letter="""
+char id=39 x=49 y=225 width=14 height=20 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=0 letter="'"
+char id=61 x=65 y=225 width=29 height=19 xoffset=1 yoffset=21 xadvance=28 page=0 chnl=0 letter="="
+char id=46 x=96 y=225 width=16 height=16 xoffset=0 yoffset=36 xadvance=14 page=0 chnl=0 letter="."
+char id=126 x=114 y=225 width=31 height=15 xoffset=4 yoffset=6 xadvance=36 page=0 chnl=0 letter="~"
+char id=96 x=147 y=225 width=15 height=13 xoffset=5 yoffset=10 xadvance=27 page=0 chnl=0 letter="`"
+char id=45 x=164 y=225 width=16 height=12 xoffset=-1 yoffset=30 xadvance=11 page=0 chnl=0 letter="-"
+char id=95 x=182 y=225 width=32 height=11 xoffset=-1 yoffset=49 xadvance=27 page=0 chnl=0 letter="_"
+char id=32 x=216 y=225 width=0 height=0 xoffset=-106 yoffset=168 xadvance=14 page=0 chnl=0 letter="space"
+kernings count=82
+kerning first=81 second=81 amount=-1
+kerning first=63 second=93 amount=-2
+kerning first=63 second=100 amount=-3
+kerning first=63 second=98 amount=-3
+kerning first=63 second=37 amount=-5
+kerning first=63 second=38 amount=-5
+kerning first=63 second=90 amount=-5
+kerning first=63 second=78 amount=-5
+kerning first=63 second=80 amount=-5
+kerning first=63 second=84 amount=-2
+kerning first=63 second=76 amount=-5
+kerning first=63 second=58 amount=-1
+kerning first=63 second=94 amount=-5
+kerning first=63 second=44 amount=-4
+kerning first=63 second=96 amount=-2
+kerning first=63 second=32 amount=-1
+kerning first=65 second=93 amount=-2
+kerning first=65 second=100 amount=-2
+kerning first=65 second=37 amount=-2
+kerning first=65 second=38 amount=-2
+kerning first=65 second=90 amount=-3
+kerning first=65 second=80 amount=-3
+kerning first=65 second=84 amount=-1
+kerning first=65 second=76 amount=-4
+kerning first=65 second=44 amount=-4
+kerning first=65 second=96 amount=-2
+kerning first=55 second=100 amount=-2
+kerning first=55 second=63 amount=-4
+kerning first=55 second=65 amount=-4
+kerning first=55 second=68 amount=-4
+kerning first=55 second=66 amount=-4
+kerning first=55 second=32 amount=-2
+kerning first=68 second=92 amount=-4
+kerning first=68 second=91 amount=-4
+kerning first=68 second=37 amount=-3
+kerning first=68 second=38 amount=-3
+kerning first=68 second=90 amount=-4
+kerning first=68 second=80 amount=-4
+kerning first=68 second=84 amount=-2
+kerning first=68 second=76 amount=-4
+kerning first=68 second=97 amount=-3
+kerning first=68 second=44 amount=-4
+kerning first=68 second=96 amount=-3
+kerning first=68 second=32 amount=-1
+kerning first=66 second=93 amount=-1
+kerning first=66 second=37 amount=-1
+kerning first=66 second=38 amount=-1
+kerning first=66 second=90 amount=-1
+kerning first=66 second=80 amount=-1
+kerning first=66 second=76 amount=-2
+kerning first=66 second=44 amount=-2
+kerning first=66 second=96 amount=-1
+kerning first=70 second=125 amount=-5
+kerning first=70 second=123 amount=-5
+kerning first=49 second=44 amount=-3
+kerning first=60 second=125 amount=-5
+kerning first=60 second=123 amount=-5
+kerning first=60 second=81 amount=-1
+kerning first=59 second=41 amount=-3
+kerning first=59 second=101 amount=-1
+kerning first=59 second=44 amount=-4
+kerning first=59 second=32 amount=-1
+kerning first=58 second=81 amount=-3
+kerning first=58 second=61 amount=-3
+kerning first=43 second=35 amount=-1
+kerning first=42 second=105 amount=-3
+kerning first=44 second=100 amount=-1
+kerning first=44 second=98 amount=-1
+kerning first=44 second=63 amount=-4
+kerning first=44 second=65 amount=-4
+kerning first=44 second=68 amount=-4
+kerning first=44 second=66 amount=-2
+kerning first=44 second=97 amount=-1
+kerning first=44 second=32 amount=-3
+kerning first=61 second=63 amount=-1
+kerning first=61 second=65 amount=-1
+kerning first=61 second=68 amount=-1
+kerning first=61 second=66 amount=-1
+kerning first=32 second=63 amount=-1
+kerning first=32 second=71 amount=-3
+kerning first=32 second=68 amount=-1
+kerning first=32 second=44 amount=-3
diff --git a/html5/Arthur/res/fonts/futura-48.png b/html5/Arthur/res/fonts/futura-48.png
new file mode 100755
index 0000000..796a33e
Binary files /dev/null and b/html5/Arthur/res/fonts/futura-48.png differ
diff --git a/html5/Arthur/src/ActionButton.js b/html5/Arthur/src/ActionButton.js
new file mode 100644
index 0000000..fc6151e
--- /dev/null
+++ b/html5/Arthur/src/ActionButton.js
@@ -0,0 +1,168 @@
+// ActionButton.js
+
+var ActionButton = cc.Node.extend({
+ _sprite: null,
+ _rect: null,
+ _delegate: null,
+ _attackType: null,
+
+ _childObj: null,
+ rect:function(){
+ var size = this._sprite.getContentSize();
+ return cc.rect(-size.width / 2, -size.height / 2, size.width, size.height);
+ },
+ setChindObj:function(obj){
+ this._childObj = obj;
+ },
+ init:function(image){
+ this._super();
+
+ this._sprite = cc.Sprite.create(image);
+ this.addChild(this._sprite);
+ return true;
+ },
+ setDelegate:function(delegate){
+ this._delegate = delegate;
+ },
+ setAttackType:function(at){
+ this._attackType = at;
+ },
+ getAttackType:function(){
+ return this._attackType;
+ },
+ onEnter:function(){
+ cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(this, 0, false);
+ this._super();
+ },
+ onExit:function(){
+ cc.Director.getInstance().getTouchDispatcher().removeDelegate(this);
+ this._super();
+ },
+ containsTouchLocation:function(touch){
+ return cc.rectContainsPoint(this.rect(), this.convertTouchToNodeSpace(touch));
+ },
+ onTouchBegan:function(touch, event){
+ // 区域判断
+ if (!this.containsTouchLocation(touch))
+ return false;
+ this.click();
+ // 播放点击动画
+ return true;
+ },
+ click:function(){
+ if(this._delegate && this._childObj.isCanClick()){
+ this._delegate.attackButtonClick(this.getAttackType());
+ this.beganAnimation();
+ }
+ },
+ onTouchEnded:function(touch, event){
+ this.endedAnimation();
+ },
+ beganAnimation:function(){
+ },
+ endedAnimation:function(){
+ },
+ isCanClick:function(){
+ return true;
+ }
+});
+
+var AttackButton = ActionButton.extend({
+ _pt: null,
+ _ac: null,
+
+ _defaultScale: 0.35,
+ _maxScale: 0.5,
+
+ _inAction: null,
+ _outAction: null,
+
+ _timestamp: null,
+ ctor:function(){
+ this._super();
+ this._pt= cc.Sprite.create(s_AttackO);
+ this._pt.setScale(this._maxScale);
+ this.setChindObj(this);
+
+ // this.addChild(this._pt);
+
+ var aScale = cc.ScaleTo.create(0.1, this._defaultScale);
+ var aFadein = cc.FadeIn.create(0.1);
+ this._inAction = cc.Spawn.create(aScale, aFadein);
+
+ var oScale = cc.ScaleTo.create(.2, this._maxScale);
+ var oFade = cc.FadeOut.create(0.2);
+ this._outAction = cc.Spawn.create(oScale, oFade);
+ },
+ beganAnimation:function(){
+ var timestamp = (new Date()).valueOf();
+ this._timestamp = timestamp;
+
+ this.removeChild(this._pt);
+ this.addChild(this._pt);
+ this._pt.runAction(this._inAction);
+
+ },
+ endedAnimation:function(){
+ this._pt.stopAllActions();
+ this._pt.runAction(this._outAction);
+ },
+ clickUp:function(){
+ this.endedAnimation();
+ },
+ isCanClick:function(){
+ var timestamp = (new Date()).valueOf();
+ return timestamp - this._timestamp > 600;
+ }
+});
+
+var AttackEffect = ActionButton.extend({
+ _pt: null,
+ _ac: null,
+ _isCanClick: true,
+ ctor:function(){
+ this._super();
+ var h = cc.Sprite.create(s_AttackFreeze);
+ this._pt = cc.ProgressTimer.create(h);
+ this._pt.setType(cc.PROGRESS_TIMER_TYPE_RADIAL);
+ this._pt.setReverseDirection(true);
+ this._pt.setScale(0.43);
+
+ var to = cc.ProgressTo.create(0, 99.999);
+ var to1 = cc.ProgressTo.create(2, 0);
+ var ac2 = cc.CallFunc.create(this.callBack, this);
+ this._ac = cc.Sequence.create(to, to1, ac2);
+ this.setChindObj(this);
+ },
+ beganAnimation:function(){
+ this.removeChild(this._pt);
+ this.addChild(this._pt);
+ this._pt.runAction(this._ac);
+ this._isCanClick = false;
+ },
+ endedAnimation:function(){
+ },
+ callBack:function(){
+ // cc.log("call back");
+ this._isCanClick = true;
+ },
+ isCanClick:function(){
+ return this._isCanClick;
+ }
+});
+
+AttackButton.initWithImage = function(image){
+ var ab = new AttackButton();
+ if (ab && ab.init(image)){
+ return ab;
+ }
+ return null;
+};
+
+AttackEffect.initWithImage = function(image){
+ var ae = new AttackEffect();
+ if (ae && ae.init(image))
+ return ae;
+ return null;
+};
+
diff --git a/html5/Arthur/src/Characters.js b/html5/Arthur/src/Characters.js
new file mode 100644
index 0000000..e88b079
--- /dev/null
+++ b/html5/Arthur/src/Characters.js
@@ -0,0 +1,407 @@
+// Character.js
+
+var ActionSprite = cc.Node.extend({
+ _sprite: null,
+ _state: null,
+
+ _isRun: false,
+ _RunDegrees: 0,
+ _speed: 300,
+
+ _actionStand: null,
+ _actionRunning: null,
+ _actionAttack: null,
+ _actionAttackJump: null,
+ _actionAttackT: null,
+
+ _zLocation: null, // 脚下所占的位置,y 坐标,用以判断 前后层次关系
+ _flipX: false,
+ _imageflipX: false, // 默认图片是否面向右
+ _attackRangt: 150, // 打击距离
+
+ _obj: null,
+ _blood: 100,
+ _bloodMax: 100,
+ _lossBlood: null,
+ _roleType: null,
+
+ init:function(obj){
+ var bRet = false;
+ if (this._super()){
+ this._obj = obj;
+
+ this.scheduleUpdate();
+
+ cc.NotificationCenter.getInstance().addObserver(this, this.acceptAttack, "attack", null);
+
+ bRet = true;
+ }
+ cc.log("action sprite init ...");
+ return bRet;
+ },
+ acceptAttack:function(obj){
+ if (this != obj){
+ // 同一水平高度
+ if (Math.abs(this.getZLocation() - obj.getZLocation()) < 30){
+ cc.log("accept attack ..." + obj._attackRangt);
+
+ // 距离
+ var value = this.getPosition().x - obj.getPosition().x;
+ if (!obj.isFlip() && value >= 0 && value < obj._attackRangt){
+ this.blood();
+ }else if(obj.isFlip() && value <= 0 && -value < obj._attackRangt){
+ this.blood();
+ }
+ // cc.log("value: " + value);
+ }
+ }
+ },
+ isFlip:function(){
+ // return this._imageflipX ? !this._flipX: this._flipX;
+ return this._flipX;
+ },
+ setSprite:function(image, pos){
+ this._sprite = cc.Sprite.create(image);
+ this.addChild(this._sprite);
+ this.setPosition(pos);
+ },
+ runWithDegrees:function(degrees){
+ this._isRun = true;
+ this._RunDegrees = degrees;
+ // var x = Math.sin(this._RunDegrees * (2 * 3.14 / 360)) * 1;
+ this.hRunning();
+ // cc.log("klt:" + this._isRun);
+ },
+ moveWithDegrees:function(degrees){
+ this._RunDegrees = degrees;
+ },
+ idle:function(){
+ this._isRun = false;
+ if (!this.isAttack())
+ this.hStand();
+ },
+ update:function(dt){
+ // 打斗时是不能够跑动的
+ if (this._isRun && !this.isAttack()){
+
+ var x = Math.sin(this._RunDegrees * 2 * Math.PI / 360) * this._speed * dt;
+ var y = Math.cos(this._RunDegrees * 2 * Math.PI / 360) * this._speed * dt;
+
+ var p = cc.p(-y, x);
+ if (y < 0){
+ this._flipX = true;
+ this._sprite.setFlipX(!this._imageflipX);
+ }
+ if (y > 0){
+ this._sprite.setFlipX(this._imageflipX);
+ this._flipX = false;
+ }
+
+ this.setPosition(cc.pSub(this.getPosition(), p));
+ }
+ this.checkLocation();
+ this.ai();
+ },
+ ai:function(){
+
+ },
+ checkLocation:function(){
+
+ // 检测当前位置,超出范围控制
+ var curPoint = this.getPosition();
+ var newPoint = this.getPosition();
+ if (curPoint.x < 60)
+ newPoint.x = 60;
+ if (curPoint.y < 120)
+ newPoint.y = 120;
+ if (curPoint.x > _winSize.width - 60)
+ newPoint.x = _winSize.width - 60;
+ if (curPoint.y > _winSize.height / 2 + 80)
+ newPoint.y = _winSize.height / 2 + 80;
+ this.setPosition(newPoint);
+ },
+ hStand:function(){
+ this._sprite.stopAllActions();
+ this._sprite.runAction(this._actionStand);
+ this._state = AC.STATE_HERO_STAND;
+ },
+ hRunning:function(){
+ this._sprite.stopAllActions();
+ this._sprite.runAction(this._actionRunning);
+ this._state = AC.STATE_HERO_RUNNING;
+ },
+ isAttack:function(){
+ return this._state == AC.STATE_HERO_ATTACK;
+ },
+ setZLocatoin:function(zl){
+ this._zLocation = zl;
+ // var sprite = cc.Sprite.create(s_HeroState2);
+ // sprite.setPosition(cc.p(0, zl));
+ // this.addChild(sprite);
+ },
+ getZLocation:function(){
+ return this.getPosition().y + this._zLocation;
+ },
+
+ blood:function(){ // 掉血
+ var lb = 30;
+ this._blood -= lb;
+ this.removeChild(this._lossBlood);
+ this._lossBlood = cc.LabelTTF.create("-" + lb, AC.FONT, 20);
+ this._lossBlood.setPosition(cc.p(0, -this._zLocation));
+ this.addChild(this._lossBlood);
+
+ var fadeIn = cc.FadeIn.create(0.8);
+ var fadeOut = cc.FadeOut.create(1);
+ var mu = cc.MoveTo.create(1, cc.p(0, 30 + -this._zLocation));
+ var a = cc.Spawn.create(fadeIn,fadeOut, mu);
+ // this._lossBlood.runAction(cc.Sequence.create(cc.DelayTime.create(0.5), a));
+ this._lossBlood.runAction(a);
+
+ // 控制掉血,发送一个掉血的消息
+ cc.NotificationCenter.getInstance().postNotification("status", this);
+ },
+ postAttack:function(){
+ this.setAttackRect();
+ cc.NotificationCenter.getInstance().postNotification("attack", this);
+ },
+ setAttackRect:function(){ // 设置打击范围
+ // cc.log("set attack rect ...");
+
+ // var point = this.getPosition();
+ // var attackWidth = 100;
+ //
+ // var newPoint = this._flipX ? cc.pSub(point, cc.p(100, 0)) : point;
+ // this._attackRect = cc.rect(point.x - 100 * 2, point.y, 100, 5);
+
+ // var tagLayer = 10001;
+ // var layer = cc.LayerColor.create(cc.c4b(0, 200, 200, 64), 100, 5);
+ // layer.setPosition(newPoint);
+ // this.getParent().removeChildByTag(tagLayer);
+ // this.getParent().addChild(layer, 0, tagLayer);
+ },
+ getBloodPercent:function(){
+ var p = this._blood / this._bloodMax;
+ cc.log("k" + p);
+ return p;
+ },
+ setRoleType:function(type){
+ this._roleType = type;
+ },
+ getRoleType:function(){
+ return this._roleType;
+ }
+});
+
+var Hero = ActionSprite.extend({
+
+ init:function(){
+ var bRet = false;
+ if (this._super()){
+
+ this.setSprite(s_Hero1, cc.p(300, 300));
+ this.setZLocatoin(-80);
+ this.initAction();
+ this.hStand();
+ this.setRoleType(AC.ROLE_HERO);
+ bRet = true;
+ }
+ return bRet;
+ },
+ initAction:function(){
+ // stand action
+ var sa = cc.Animation.create();
+ for (var si = 1; si < 4; si++){
+ var frameName1 = "res/Hero" + si + ".png";
+ sa.addSpriteFrameWithFile(frameName1);
+ }
+ sa.setDelayPerUnit(5.8 / 14);
+ sa.setRestoreOriginalFrame(true);
+ this._actionStand = cc.RepeatForever.create(cc.Animate.create(sa));
+
+ // running action
+ var animation = cc.Animation.create();
+ for (var i = 1; i < 12; i++){
+ var frameName = "res/HeroRun" + i + ".png";
+ animation.addSpriteFrameWithFile(frameName);
+ }
+ animation.setDelayPerUnit(2.8 / 14);
+ animation.setRestoreOriginalFrame(true);
+ this._actionRunning = cc.RepeatForever.create(cc.Animate.create(animation));
+
+
+ // 普通攻击
+ var anAttack = cc.Animation.create();
+ for (var attackIndex = 1; attackIndex < 6; attackIndex ++){
+ var attackFrame = "res/HeroAttack" + attackIndex + ".png";
+ anAttack.addSpriteFrameWithFile(attackFrame);
+ }
+ anAttack.setDelayPerUnit(1.8 / 14);
+ // anAttack.setRestoreOriginalFrame(false);
+ this._actionAttack = cc.Animate.create(anAttack);
+
+ // 跳跃攻击
+ var jmpAttack = cc.Animation.create();
+ for (var ji = 1; ji < 9; ji ++){
+ var jiFrame = "res/HeroAttackJ" + ji + ".png";
+ jmpAttack.addSpriteFrameWithFile(jiFrame);
+ }
+ jmpAttack.setDelayPerUnit(0.1);
+ // jmpAttack.setRestoreOriginalFrame(false)
+ this._actionAttackJump = cc.Animate.create(jmpAttack);
+
+ // 突刺攻击
+ var tAttack = cc.Animation.create();
+ for (var ti = 1; ti < 4; ti ++){
+ var tiFrame = "res/HeroAttackT" + ti + ".png";
+ tAttack.addSpriteFrameWithFile(tiFrame);
+ }
+ tAttack.setDelayPerUnit(0.1);
+ this._actionAttackT = cc.Animate.create(tAttack);
+ },
+ hAttack:function(at){
+ var aa = null;
+ if (at == AT.ATTACK){
+ aa = this._actionAttack;
+ this._attackRangt = 150;
+ }else if (at == AT.ATTACK_A){
+ aa = this._actionAttackJump;
+ // 当前位置跳跃
+ var jump = cc.JumpTo.create(
+ 0.6, cc.pSub(this.getPosition(), cc.p(this._flipX ? 200: -200)), 120, 1);
+ this.runAction(jump);
+ this._attackRangt = 300;
+ }else if (at == AT.ATTACK_B){
+ aa = this._actionAttackT;
+ // 当前位置移动
+ var move = cc.MoveTo.create(0.3, cc.pSub(this.getPosition(), cc.p(
+ this._flipX ? 200:-200, 0)));
+ this.runAction(move);
+ this._attackRangt = 300;
+ }
+
+ if (aa){
+ this._sprite.stopAllActions();
+ var action = cc.Sequence.create(
+ aa,
+ cc.CallFunc.create(this.callBackEndAttack, this));
+ this._sprite.runAction(action);
+ this._state = AC.STATE_HERO_ATTACK;
+ this.postAttack();
+ }
+ },
+ attack:function(at){
+ this.hAttack(at);
+ },
+ callBackEndAttack:function(){
+ if (this._isRun){
+ this.hRunning();
+ }else{
+ this.hStand();
+ }
+ }
+});
+
+Hero.create = function(){
+ var hero = new Hero();
+ if (hero && hero.init(hero)){
+ return hero;
+ }
+ return null;
+};
+
+
+var Robot = ActionSprite.extend({
+ init:function(){
+ var bRet = false;
+ if (this._super()){
+
+ this.setSprite(s_RobotAttack1, cc.p(500, 300));
+ this.setZLocatoin(-80);
+ this.initAction();
+ this.runWithDegrees(180);
+ cc.log("robot init");
+ this.setRoleType(AC.ROLE_ROBOT);
+ this._imageflipX = true;
+ bRet = true;
+ this._speed = 150;
+ }
+ return bRet;
+ },
+ initAction:function(){
+ // action stand
+ var as = cc.Animation.create();
+ for (var si = 1; si < 4; si++){
+ var asFrame = "res/Robot" + si + ".png";
+ as.addSpriteFrameWithFile(asFrame);
+ }
+ as.setDelayPerUnit(0.45);
+ as.setRestoreOriginalFrame(true);
+ this._actionStand = cc.RepeatForever.create(cc.Animate.create(as));
+
+ // action running
+ var ar = cc.Animation.create();
+ for (var ri = 1; ri < 7; ri++){
+ riFrame = "res/RobotRun" + ri + ".png";
+ ar.addSpriteFrameWithFile(riFrame);
+ }
+ ar.setDelayPerUnit(0.15);
+ ar.setRestoreOriginalFrame(true);
+ this._actionRunning = cc.RepeatForever.create(cc.Animate.create(ar));
+
+ // attack
+ var aa = cc.Animation.create();
+ for (var ai = 1; ai < 6; ai ++){
+ aiFrame = "res/RobotAttack" + ai + ".png";
+ aa.addSpriteFrameWithFile(aiFrame);
+ }
+ aa.setDelayPerUnit(0.2);
+ this._actionAttack = cc.Animate.create(aa);
+
+ cc.log("robot init action");
+ },
+ hAttack:function(at){
+ var aa = this._actionAttack;
+ this._attackRangt = 150;
+ if (aa){
+ this._sprite.stopAllActions();
+ var action = cc.Sequence.create(
+ aa,
+ cc.CallFunc.create(this.callBackEndAttack, this));
+ this._sprite.runAction(action);
+ this._state = AC.STATE_HERO_ATTACK;
+ this.postAttack();
+ }
+ },
+ attack:function(button){
+ this.hAttack(button);
+ },
+ callBackEndAttack:function(){
+ if (this._isRun){
+ this.hRunning();
+ }else{
+ this.hStand();
+ }
+ },
+ _timestamp: (new Date()).valueOf(),
+ ai:function(){
+ var newTs = (new Date()).valueOf();
+ var value = newTs - this._timestamp;
+ // cc.log("ai ai ..." + value);
+ if (value % 3000 < 300 && !this.isAttack()){
+ this.attack();
+ }
+ var r = Math.random() * 360;
+ if (value % 6000 < 300)
+ this.moveWithDegrees(r);
+ }
+});
+
+Robot.create = function(){
+ var robot = new Robot();
+ if (robot && robot.init(robot)){
+ return robot;
+ }
+ return null;
+};
+
diff --git a/html5/Arthur/src/GameConfig.js b/html5/Arthur/src/GameConfig.js
new file mode 100644
index 0000000..c6cbd30
--- /dev/null
+++ b/html5/Arthur/src/GameConfig.js
@@ -0,0 +1,20 @@
+// Arthur Config
+
+var AC = AC || {};
+
+AC.KEYS = [];
+
+AC.STATE_HERO_STAND = 0;
+AC.STATE_HERO_RUNNING = 1;
+AC.STATE_HERO_ATTACK = 2;
+
+AC.FONT = "Tahoma";
+
+AC.ROLE_HERO = 0;
+AC.ROLE_ROBOT = 1;
+
+// attack type
+var AT = AT || {};
+AT.ATTACK = 1;
+AT.ATTACK_A = 2;
+AT.ATTACK_B = 3;
diff --git a/html5/Arthur/src/GameLayer.js b/html5/Arthur/src/GameLayer.js
new file mode 100644
index 0000000..5f709ee
--- /dev/null
+++ b/html5/Arthur/src/GameLayer.js
@@ -0,0 +1,92 @@
+
+var GameLayer = cc.Layer.extend({
+ mWinSize:null,
+ mPointCenter:null,
+ mHero: null,
+ mRobot: null,
+ init:function(){
+ cc.log("game layer init ...");
+ var bRef = false;
+ if(this._super()){
+ mWinSize = cc.Director.getInstance().getWinSize();
+ mPointCenter = cc.p(mWinSize.width / 2, mWinSize.height / 2);
+
+ // 添加背景
+ var backGround = cc.Sprite.create(s_BackGround);
+ backGround.setPosition(mPointCenter);
+ this.addChild(backGround);
+
+ // 添加英雄
+ this.mHero = Hero.create();
+
+ // 添加机器人
+ this.mRobot = Robot.create();
+
+ var characters = cc.Node.create();
+ characters.addChild(this.mHero);
+ characters.addChild(this.mRobot);
+ this.addChild(characters);
+
+ // 添加控制层
+ var hudLayer = HudLayer.create();
+ this.addChild(hudLayer);
+ hudLayer.setDelegate(this);
+
+ if (sys["capabilities"].hasOwnProperty('keyboard'))
+ this.setKeyboardEnabled(true);
+
+ this.scheduleUpdate();
+
+
+ bRef = true;
+ }
+ return bRef;
+ },
+ actionJoypadStart:function(degrees){
+ this.mHero.runWithDegrees(degrees);
+ // this.mRobot.runWithDegrees(degrees);
+ },
+ actionJoypadUpdate:function(degrees){
+ this.mHero.moveWithDegrees(degrees);
+ // this.mRobot.moveWithDegrees(degrees);
+ },
+ actionJoypadEnded:function(degrees){
+ this.mHero.idle();
+ // this.mRobot.idle();
+ },
+ attackButtonClick:function(button){
+ this.mHero.attack(button);
+ // this.mRobot.attack(button);
+ },
+ onKeyDown:function(e){
+ // 保存所有的按键信息
+ AC.KEYS[e] = true;
+ },
+ onKeyUp:function(e){
+ AC.KEYS[e] = false;
+ },
+ update:function(dt){
+ var b = this.mHero.getZLocation() > this.mRobot.getZLocation();
+ this.mHero.setZOrder(b ? 0: 1);
+ this.mRobot.setZOrder(b ? 1: 0) ;
+ }
+});
+
+GameLayer.create = function(){
+ var sg = new GameLayer();
+ if (sg && sg.init()){
+ return sg;
+ }
+ return null;
+};
+
+GameLayer.scene = function(){
+ var scene = cc.Scene.create();
+ // var layer = new GameLayer();
+ // layer.init();
+ var layer = GameLayer.create();
+ scene.addChild(layer);
+ return scene;
+};
+
+
diff --git a/html5/Arthur/src/HudLayer.js b/html5/Arthur/src/HudLayer.js
new file mode 100644
index 0000000..d123d7f
--- /dev/null
+++ b/html5/Arthur/src/HudLayer.js
@@ -0,0 +1,214 @@
+// HudLayer.js
+
+var State = cc.Node.extend({
+ _bloodSprite: null,
+ _roleType: null,
+ ctor:function(){
+ this._super();
+ },
+ setBloodSprite:function(obj){
+ this._bloodSprite = obj;
+ },
+ init:function(){
+ var bRet = false;
+
+ if(this._super()){
+ cc.NotificationCenter.getInstance().addObserver(this, this.notifyChangeStatus, "status", null);
+
+ bRet = true;
+ }
+
+ return bRet;
+ },
+ notifyChangeStatus:function(obj){
+ if (obj.getRoleType() == this._roleType){
+ cc.log("notify status ...");
+ this.setBlood(obj.getBloodPercent());
+ }
+ },
+ setBlood:function(value){
+ // 显示血量百分比
+ if (value < 0)
+ value = 0;
+ if (value > 1)
+ value = 1;
+ this._bloodSprite.setScaleX(value);
+ },
+ setRoleType:function(type){
+ this._roleType = type;
+ }
+});
+
+State.create = function(){
+ var state = new State();
+ if (state && state.init()){
+ return state;
+ }
+ return null;
+};
+
+State.createHero = function(){
+ var state = State.create();
+
+
+ var s1 = cc.Sprite.create(s_HeroState1);
+ var s2 = cc.Sprite.create(s_HeroState2);
+ var s3 = cc.Sprite.create(s_HeroState3);
+ var s4 = cc.Sprite.create(s_HeroState4);
+
+ s1.setPosition(cc.p(-80, 3));
+ s2.setPosition(cc.p(33, 15));
+
+ s3.setPosition(cc.p(-45, -12));
+ s3.setAnchorPoint(cc.p(0, 0));
+
+ state.setBloodSprite(s3);
+
+ state.addChild(s1);
+ state.addChild(s2);
+ state.addChild(s3);
+ state.addChild(s4);
+ state.setRoleType(AC.ROLE_HERO);
+
+ var title = cc.LabelTTF.create("Lv7 一叶", "Tahoma", 14);
+ title.setPosition(cc.p(-15, 30));
+ state.addChild(title);
+
+
+ return state;
+};
+
+State.createRobot = function(){
+ var state = State.create();
+ var s1 = cc.Sprite.create(s_RobotState1);
+ var s2 = cc.Sprite.create(s_RobotState2);
+ var s3 = cc.Sprite.create(s_RobotState3);
+ var s4 = cc.Sprite.create(s_RobotState4);
+
+ s1.setPosition(cc.p(50, -16));
+ state.setBloodSprite(s1);
+ s1.setAnchorPoint(cc.p(1, 0));
+
+ // s1.ignoreAnchorPointForPosition(true);
+
+ s2.setPosition(cc.p(-20, -7));
+ s4.setPosition(cc.p(65, 1));
+
+ state.setRoleType(AC.ROLE_ROBOT);
+
+ state.addChild(s2);
+ state.addChild(s1);
+ state.addChild(s3);
+ state.addChild(s4);
+
+ var title = cc.LabelTTF.create("Lv5 子龙山人", "Tahoma", 14);
+ title.setPosition(cc.p(-15, 12));
+ state.addChild(title);
+
+ return state;
+};
+
+var HudLayer = cc.Layer.extend({
+ _winSize: null,
+ _pCenter: null,
+ _delegate: null,
+
+ mJoypad: null,
+ mStateHero: null,
+ mStateRobot: null,
+
+ mAttack: null,
+ mAttackA: null,
+ mAttackB: null,
+ ctor:function(){
+ this._super();
+ _winSize = cc.Director.getInstance().getWinSize();
+ _pCenter = cc.p(_winSize.width / 2, _winSize.height / 2);
+ },
+ init:function(){
+ cc.log("Hud layer init ..");
+ var bRet = false;
+
+ if(this._super()){
+
+ // 添加控制器
+ this.mJoypad = Joypad.create();
+ this.addChild(this.mJoypad);
+
+ var keyMap = KeyMap.create();
+ keyMap.setDelegateJoypad(this.mJoypad);
+ keyMap.setDelegateAttack(this);
+ this.addChild(keyMap);
+
+ // 添加攻击按钮
+
+ this.mAttack = AttackButton.initWithImage(s_Attack);
+ this.mAttack.setPosition(cc.p(mWinSize.width - 80, 80));
+ this.mAttack.setDelegate(this);
+ this.mAttack.setAttackType(AT.ATTACK);
+ this.addChild(this.mAttack);
+
+ // 添加特效攻击
+ // var attackA = cc.Sprite.create(s_AttackA);
+ this.mAttackA = AttackEffect.initWithImage(s_AttackA);
+ this.mAttackA.setPosition(cc.p(mWinSize.width - 200, 60));
+ this.mAttackA.setDelegate(this);
+ this.mAttackA.setAttackType(AT.ATTACK_A);
+ this.addChild(this.mAttackA);
+
+ // var attackB = cc.Sprite.create(s_AttackB);
+ this.mAttackB = AttackEffect.initWithImage(s_AttackB);
+ this.mAttackB.setPosition(cc.p(mWinSize.width - 165, 165));
+ this.mAttackB.setDelegate(this);
+ this.mAttackB.setAttackType(AT.ATTACK_B);
+ this.addChild(this.mAttackB);
+
+ // 添加 Hero 血条状态
+ this.mStateHero = State.createHero();
+ this.mStateHero.setPosition(cc.p(130, _winSize.height - 55));
+ this.addChild(this.mStateHero);
+
+ // 怪物血条
+ this.mStateRobot = State.createRobot();
+ this.mStateRobot.setPosition(cc.p(800 - 100, _winSize.height - 35));
+ this.addChild(this.mStateRobot);
+
+ bRet = true;
+ }
+ return bRet;
+ },
+ setDelegate: function(delegate){
+ this._delegate = delegate;
+ this.mJoypad.setDelegate(delegate);
+ },
+
+ attackButtonClick:function(button){
+ if (this._delegate){
+ this._delegate.attackButtonClick(button);
+ }
+ },
+ keyAttack:function(btnType){
+ if (btnType == AT.ATTACK_A && this.mAttackA.isCanClick())
+ this.mAttackA.click();
+ if (btnType == AT.ATTACK_B && this.mAttackB.isCanClick())
+ this.mAttackB.click();
+ if (btnType == AT.ATTACK && this.mAttack.isCanClick())
+ this.mAttack.click();
+
+ // this.attackButtonClick(bunType);
+ },
+ keyAttackUp:function(btnType){
+ if (btnType == AT.ATTACK) // && this.mAttack.isCanClick())
+ this.mAttack.clickUp();
+ }
+});
+
+HudLayer.create = function(){
+ var hudlayer = new HudLayer();
+ if (hudlayer && hudlayer.init()){
+ return hudlayer;
+ }
+ return null;
+};
+
+
diff --git a/html5/Arthur/src/Joypad.js b/html5/Arthur/src/Joypad.js
new file mode 100644
index 0000000..c3c47ea
--- /dev/null
+++ b/html5/Arthur/src/Joypad.js
@@ -0,0 +1,129 @@
+// Joypad.js
+
+var Joypad = cc.Layer.extend({
+ _winSize: null,
+ _pCenter: null,
+ _pControlSprite: null,
+ _pDefaultPoint: null,
+
+ _pDefaultRotation: null,
+ _pRotation: null,
+
+ _pDelegate: null,
+ _pKeyDown: false,
+ ctor:function(){
+ this._super();
+
+ _winSize = cc.Director.getInstance().getWinSize();
+ _pCenter = cc.p(_winSize.width / 2, _winSize.height / 2);
+
+ },
+ init:function(){
+ var bRet = false;
+ if (this._super()){
+ cc.log("Joypad init ..");
+ // 控制杆所在位置
+ this._pDefaultPoint = cc.p(110, 110);
+ // 默认旋转角度,以使开口正对右侧
+ this._pDefaultRotation = 26;
+ // 实际旋转角度
+ this._pRotation = 0;
+
+ this.setPosition(this._pDefaultPoint);
+
+ this.addChild(cc.Sprite.create(s_Joypad1));
+ this.addChild(cc.Sprite.create(s_Joypad2));
+ this._pControlSprite = cc.Sprite.create(s_Joypad3);
+ this.addChild(this._pControlSprite);
+ this.addChild(cc.Sprite.create(s_Joypad4));
+
+ this.updateRotation();
+
+ bRet = true;
+ }
+ return bRet;
+ },
+ keyStart:function(degrees){
+ if (this._pDelegate)
+ this._pDelegate.actionJoypadStart(this._pRotation);
+ },
+ keyUpdate:function(degrees){
+ this._pRotation = degrees;
+ this.updateRotation();
+ if (this._pDelegate)
+ this._pDelegate.actionJoypadUpdate(this._pRotation);
+ },
+ keyEnded:function(degrees){
+ if (this._pDelegate)
+ this._pDelegate.actionJoypadEnded(this._pRotation);
+ },
+ onEnter:function(){
+ this._super();
+ cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(this, 0, true);
+ },
+ onTouchBegan:function (touch, event){
+ // 点击点的范围判断
+ var curPoint = touch.getLocation();
+ if (curPoint.x > _winSize.width / 2 || curPoint.y > _winSize.height / 2 ){
+ return false;
+ }
+
+ // var sp = cc.pSub(this._pDefaultPoint, curPoint);
+ // var angle = cc.pToAngle(sp);
+
+ this.updateTouchRotation(touch, event);
+ this.updateRotation();
+ if(this._pDelegate)
+ this._pDelegate.actionJoypadStart(this._pRotation);
+ else
+ cc.log('_pDelegate is null ... ');
+
+ // cc.log("Joypad touch ...");
+ return true;
+ },
+ onTouchMoved:function (touch, event){
+ this.updateTouchRotation(touch, event);
+ this.updateRotation();
+
+ if (this._pDelegate)
+ this._pDelegate.actionJoypadUpdate(this._pRotation);
+ else
+ cc.log('_pDelegate is null ... ');
+
+ // var a = cc.pAngleSigned( curPoint, this._pDefaultPoint);
+ // cc.log("Joypad touch mvove ..." + rotation) ;
+ },
+ onTouchEnded:function (touch, event){
+ this.updateTouchRotation(touch, event);
+ this.updateRotation();
+ if (this._pDelegate)
+ this._pDelegate.actionJoypadEnded(this._pRotation);
+ else
+ cc.log('_pDelegate is null ... ');
+ },
+ updateTouchRotation:function(touch, event){
+ var curPoint = touch.getLocation();
+ var sp = cc.pSub(curPoint, this._pDefaultPoint);
+ var angle = cc.pToAngle(sp) ;// * -57.29577951;
+ var rotation = angle * -57.29577951;
+ rotation = rotation < 0 ? 360 + rotation: rotation;
+ this._pRotation = rotation;
+ },
+ updateRotation:function(){
+ this._pControlSprite.setRotation(this._pDefaultRotation + this._pRotation);
+ },
+ setDelegate:function(dg){
+ this._pDelegate = dg;
+ }
+});
+
+Joypad.create = function(){
+ var joypad = new Joypad();
+ if (joypad && joypad.init()){
+ return joypad;
+ }
+ return null;
+};
+
+
+
diff --git a/html5/Arthur/src/KeyMap.js b/html5/Arthur/src/KeyMap.js
new file mode 100644
index 0000000..fc3e25d
--- /dev/null
+++ b/html5/Arthur/src/KeyMap.js
@@ -0,0 +1,142 @@
+// KeyMap.js
+
+var KeyMap = cc.Layer.extend({
+ _delegateJoypad: null,
+ _delegateAttack: null,
+ _pJoyKeyDown: false,
+ _pJKeyDown: false,
+ _pUKeyDown: false,
+ _pIKeyDown: false,
+ init:function(){
+ this._super();
+ this.scheduleUpdate();
+ return true;
+ },
+ setDelegateJoypad:function(delegate){
+ this._delegateJoypad = delegate;
+ },
+ setDelegateAttack:function(delegate){
+ this._delegateAttack = delegate;
+ },
+ update:function(dt){
+ this._super();
+
+ // 控制杆键盘映射处理
+ var au = false;
+ var al = false;
+ var ad = false;
+ var ar = false;
+
+ if ((AC.KEYS[cc.KEY.w] || AC.KEYS[cc.KEY.up])){
+ au = true;
+ }
+ if ((AC.KEYS[cc.KEY.a] || AC.KEYS[cc.KEY.left])){
+ al = true;
+ }
+ if ((AC.KEYS[cc.KEY.s] || AC.KEYS[cc.KEY.down])){
+ ad = true;
+ }
+ if ((AC.KEYS[cc.KEY.d] || AC.KEYS[cc.KEY.right])){
+ ar = true;
+ }
+
+ var newDegrees = -1;
+ if (au && !al && !ad && !ar)
+ newDegrees = 270;
+ if (!au && al && !ad && !ar)
+ newDegrees = 180;
+ if (!au && !al && ad && !ar)
+ newDegrees = 90;
+ if (!au && !al && !ad && ar)
+ newDegrees = 0;
+
+ if (au && al && !ad && !ar)
+ newDegrees = 225;
+ if (!au && al && ad && !ar)
+ newDegrees = 135;
+ if (!au && !al && ad && ar)
+ newDegrees = 45;
+ if (au && !al && !ad && ar)
+ newDegrees = -45;
+
+ if (this._delegateJoypad){
+ if (au || al || ad || ar){
+ if (!this._pJoyKeyDown)
+ this._delegateJoypad.keyStart(newDegrees);
+ this._pJoyKeyDown = true;
+ }
+ else if(this._pJoyKeyDown){
+ this._pJoyKeyDown = false;
+ this._delegateJoypad.keyEnded(newDegrees);
+ }
+ if (newDegrees != -1 && this._pJoyKeyDown){
+ this._delegateJoypad.keyUpdate(newDegrees);
+ }
+ }
+
+
+ // 攻击按钮控制映射
+ var keyJ = false;
+ var keyU = false;
+ var keyI = false;
+ if (AC.KEYS[cc.KEY.j])
+ keyJ = true;
+ if (AC.KEYS[cc.KEY.u])
+ keyU = true;
+ if (AC.KEYS[cc.KEY.i])
+ keyI = true;
+
+ var pressJ = false;
+ var pressU = false;
+ var pressI = false;
+
+ if (keyJ){
+ if (!this._pJKeyDown){
+ this._pJKeyDown = true;
+ pressJ = true;
+ }
+ }else{
+ if (this._pJKeyDown){
+ // 发送一个攻击键松开的操作
+ this._delegateAttack.keyAttackUp(AT.ATTACK);
+ }
+ this._pJKeyDown = false;
+ }
+
+ if (keyU){
+ if (!this._pUKeyDown){
+ this._pUKeyDown = true;
+ pressU = true;
+ }
+ }else{
+ this._pUKeyDown = false;
+ }
+
+ if (keyI){
+ if (!this._pIKeyDown){
+ this._pIKeyDown = true;
+ pressI = true;
+ }
+ }else{
+ this._pIKeyDown = false;
+ }
+
+ if (this._delegateAttack){
+ if (pressJ)
+ this._delegateAttack.keyAttack(AT.ATTACK);
+ if (pressU)
+ this._delegateAttack.keyAttack(AT.ATTACK_A);
+ if (pressI)
+ this._delegateAttack.keyAttack(AT.ATTACK_B);
+ }
+
+ }
+});
+
+KeyMap.create = function(){
+ var km = new KeyMap();
+ if (km && km.init())
+ return km;
+ return null;
+};
+
diff --git a/html5/Arthur/src/Loading.js b/html5/Arthur/src/Loading.js
new file mode 100644
index 0000000..88e8635
--- /dev/null
+++ b/html5/Arthur/src/Loading.js
@@ -0,0 +1,182 @@
+
+var logoData = "data:image/png;base64,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";
+
+// cc.LoaderScene.prototype.init = function(){
+// cc.Scene.prototype.init.call(this);
+// var logoHeight = 200;
+// var centerPos = cc.p(this._winSize.width / 2, this._winSize.height / 2);
+
+// this._logoTexture = new Image();
+// var _this = this;
+// this._logoTexture.addEventListener("load", function () {
+// _this._initStage(centerPos);
+// });
+// this._logoTexture.src = logoData;
+// // this._logoTexture.width = 160;
+// // this._logoTexture.height = 200;
+// this._logoTexture.width = 242;
+// this._logoTexture.height = 114;
+
+// // bg
+// this._bgLayer = cc.LayerColor.create(cc.c4(232, 232, 232, 255));
+// this._bgLayer.setPosition(cc.p(0, 0));
+// this.addChild(this._bgLayer, 0);
+
+// //loading percent
+// this._label = cc.LabelTTF.create("Loading... 0%", "Arial", 14);
+// this._label.setColor(cc.c3(180, 180, 180));
+// this._label.setOpacity(0);
+// this._label.setPosition(cc.pAdd(centerPos, cc.p(0, -logoHeight / 2 - 10)));
+// this._label.setPosition(cc.pAdd(centerPos, cc.p(0, -logoHeight / 2 - 100)));
+// this._bgLayer.addChild(this._label, 10);
+// };
+
+/**
+ * Used to display the loading screen
+ * @class
+ * @extends cc.Scene
+ */
+Loading = cc.Scene.extend(/** @lends cc.LoaderScene# */{
+ _logo: null,
+ _logoTexture: null,
+ _texture2d: null,
+ _bgLayer: null,
+ _label: null,
+ _winSize:null,
+ _processLayer: null,
+ _processLayerLength: null,
+
+ /**
+ * Constructor
+ */
+ ctor: function () {
+ this._super();
+ this._winSize = cc.Director.getInstance().getWinSize();
+ },
+ init:function(){
+ cc.Scene.prototype.init.call(this);
+
+ //logo
+ var logoHeight = 200;
+ var centerPos = cc.p(this._winSize.width / 2, this._winSize.height / 2);
+
+ this._logoTexture = new Image();
+ var _this = this;
+ this._logoTexture.addEventListener("load", function () {
+ _this._initStage(centerPos);
+ });
+ this._logoTexture.src = logoData;
+ this._logoTexture.width = 242;
+ this._logoTexture.height = 114;
+
+ // bg
+ this._bgLayer = cc.LayerColor.create(cc.c4(200, 200, 200, 255));
+ this._bgLayer.setPosition(cc.p(0, 0));
+ this.addChild(this._bgLayer, 0);
+
+ //loading percent
+ this._label = cc.LabelTTF.create("Loading... 0%", "Arial", 14);
+ this._label.setColor(cc.c3(80, 80, 80));
+ this._label.setOpacity(0);
+ // this._label.setPosition(cc.pAdd(centerPos, cc.p(0, -logoHeight / 2 - 10)));
+ this._label.setPosition(cc.pAdd(centerPos, cc.p(0, -logoHeight / 2 - 100)));
+ this._bgLayer.addChild(this._label, 10);
+
+ this._processLayerLength = 500;
+ this._processLayer = cc.LayerColor.create(cc.c4b(255, 100, 100, 128), 1, 30);
+ this._processLayer.setPosition(cc.pAdd(centerPos, cc.p(- this._processLayerLength / 2, -logoHeight / 2 - 50)));
+ // this._processLayer.ignoreAnchorPointForPosition(false);
+ // this._processLayer.setAnchorPoint(cc.p(0, 0));
+ this._bgLayer.addChild(this._processLayer);
+ },
+
+ _initStage: function (centerPos) {
+ if (cc.renderContextType === cc.CANVAS) {
+ this._logo = cc.Sprite.createWithTexture(this._logoTexture);
+ } else {
+ this._texture2d = new cc.Texture2D();
+ this._texture2d.initWithElement(this._logoTexture);
+ this._texture2d.handleLoadedTexture();
+ this._logo = cc.Sprite.createWithTexture(this._texture2d);
+ }
+ this._logo.setPosition(centerPos);
+ this._bgLayer.addChild(this._logo, 10);
+
+ //load resources
+ this._logoFadeIn();
+ },
+
+ onEnter: function () {
+ cc.Node.prototype.onEnter.call(this);
+ this.schedule(this._startLoading, 0.3);
+ },
+
+ onExit: function () {
+ cc.Node.prototype.onExit.call(this);
+ var tmpStr = "Loading... 0%";
+ this._label.setString(tmpStr);
+ },
+
+ /**
+ * init with resources
+ * @param {Array} resources
+ * @param {Function|String} selector
+ * @param {Object} target
+ */
+ initWithResources: function (resources, selector, target) {
+ this.resources = resources;
+ this.selector = selector;
+ this.target = target;
+ },
+
+ _startLoading: function () {
+ this.unschedule(this._startLoading);
+ cc.Loader.preload(this.resources, this.selector, this.target);
+ this.schedule(this._updatePercent);
+ },
+
+ _logoFadeIn: function () {
+ var logoAction = cc.Spawn.create(
+ cc.EaseBounce.create(cc.MoveBy.create(0.25, cc.p(0, 10))),
+ cc.FadeIn.create(0.5));
+
+ var labelAction = cc.Sequence.create(
+ cc.DelayTime.create(0.15),
+ logoAction.clone());
+
+ this._logo.runAction(logoAction);
+ this._label.runAction(labelAction);
+ },
+
+ _updatePercent: function () {
+ var percent = cc.Loader.getInstance().getPercentage();
+ var tmpStr = "Loading... " + percent + "%";
+ this._label.setString(tmpStr);
+
+ this._processLayer.changeWidth(this._processLayerLength * percent / 100);
+
+ if (percent >= 100)
+ this.unschedule(this._updatePercent);
+ }
+});
+
+Loading.preload = function (resources, selector, target) {
+ if (!this._instance) {
+ this._instance = new Loading();
+ this._instance.init();
+ }
+
+ this._instance.initWithResources(resources, selector, target);
+
+ var director = cc.Director.getInstance();
+ if (director.getRunningScene()) {
+ director.replaceScene(this._instance);
+
+ } else {
+ director.runWithScene(this._instance);
+ }
+
+ return this._instance;
+};
+
+
diff --git a/html5/Arthur/src/resource.js b/html5/Arthur/src/resource.js
new file mode 100755
index 0000000..0cc018a
--- /dev/null
+++ b/html5/Arthur/src/resource.js
@@ -0,0 +1,166 @@
+var s_HelloWorld = "res/HelloWorld.png";
+var s_CloseNormal = "res/CloseNormal.png";
+var s_CloseSelected = "res/CloseSelected.png";
+
+var s_BackGround = "res/BackGround.png";
+var s_Attack = "res/Attack.png";
+var s_AttackO = "res/AttackO.png";
+var s_AttackA = "res/AttackA.png";
+var s_AttackB = "res/AttackB.png";
+var s_AttackFreeze = "res/AttackFreeze.png";
+
+var s_Joypad1 = "res/Joypad1.png";
+var s_Joypad2 = "res/Joypad2.png";
+var s_Joypad3 = "res/Joypad3.png";
+var s_Joypad4 = "res/Joypad4.png";
+
+
+var s_Hero1 = "res/Hero1.png";
+var s_Hero2 = "res/Hero2.png";
+var s_Hero3 = "res/Hero3.png";
+
+var s_HeroState1 = "res/HeroState1.png";
+var s_HeroState2 = "res/HeroState2.png";
+var s_HeroState3 = "res/HeroState3.png";
+var s_HeroState4 = "res/HeroState4.png";
+
+var s_HeroRun1 = "res/HeroRun1.png";
+var s_HeroRun2 = "res/HeroRun2.png";
+var s_HeroRun3 = "res/HeroRun3.png";
+var s_HeroRun4 = "res/HeroRun4.png";
+var s_HeroRun5 = "res/HeroRun5.png";
+var s_HeroRun6 = "res/HeroRun6.png";
+var s_HeroRun7 = "res/HeroRun7.png";
+var s_HeroRun8 = "res/HeroRun8.png";
+var s_HeroRun9 = "res/HeroRun9.png";
+var s_HeroRun10 = "res/HeroRun10.png";
+var s_HeroRun11 = "res/HeroRun11.png";
+
+var s_HeroAttack1 = "res/HeroAttack1.png";
+var s_HeroAttack2 = "res/HeroAttack2.png";
+var s_HeroAttack3 = "res/HeroAttack3.png";
+var s_HeroAttack4 = "res/HeroAttack4.png";
+var s_HeroAttack5 = "res/HeroAttack5.png";
+
+var s_HeroAttackJ1 = "res/HeroAttackJ1.png";
+var s_HeroAttackJ2 = "res/HeroAttackJ2.png";
+var s_HeroAttackJ3 = "res/HeroAttackJ3.png";
+var s_HeroAttackJ4 = "res/HeroAttackJ4.png";
+var s_HeroAttackJ5 = "res/HeroAttackJ5.png";
+var s_HeroAttackJ6 = "res/HeroAttackJ6.png";
+var s_HeroAttackJ7 = "res/HeroAttackJ7.png";
+var s_HeroAttackJ8 = "res/HeroAttackJ8.png";
+
+var s_HeroAttackT1 = "res/HeroAttackT1.png";
+var s_HeroAttackT2 = "res/HeroAttackT2.png";
+var s_HeroAttackT3 = "res/HeroAttackT3.png";
+
+
+var s_Robot1 = "res/Robot1.png";
+var s_Robot2 = "res/Robot2.png";
+var s_Robot3 = "res/Robot3.png";
+
+var s_RobotState1 = "res/RobotState1.png";
+var s_RobotState2 = "res/RobotState2.png";
+var s_RobotState3 = "res/RobotState3.png";
+var s_RobotState4 = "res/RobotState4.png";
+
+var s_RobotRun1 = "res/RobotRun1.png";
+var s_RobotRun2 = "res/RobotRun2.png";
+var s_RobotRun3 = "res/RobotRun3.png";
+var s_RobotRun4 = "res/RobotRun4.png";
+var s_RobotRun5 = "res/RobotRun5.png";
+var s_RobotRun6 = "res/RobotRun6.png";
+
+var s_RobotAttack1 = "res/RobotAttack1.png";
+var s_RobotAttack2 = "res/RobotAttack2.png";
+var s_RobotAttack3 = "res/RobotAttack3.png";
+var s_RobotAttack4 = "res/RobotAttack4.png";
+var s_RobotAttack5 = "res/RobotAttack5.png";
+
+var s_futura48 = "res/fonts/futura-48.png";
+var s_fnt_futura48 = "res/fonts/futura-48.fnt";
+
+var g_resources = [
+ //image
+ {src:s_HelloWorld},
+ {src:s_CloseNormal},
+ {src:s_CloseSelected},
+ {src:s_BackGround},
+ {src:s_Joypad1},
+ {src:s_Joypad2},
+ {src:s_Joypad3},
+ {src:s_Joypad4},
+
+ {src:s_Attack},
+ {src:s_AttackA},
+ {src:s_AttackB},
+ {src:s_AttackO},
+ {src:s_AttackFreeze},
+
+ {src:s_Hero1},
+ {src:s_Hero2},
+ {src:s_Hero3},
+ {src:s_HeroState1},
+ {src:s_HeroState2},
+ {src:s_HeroState3},
+ {src:s_HeroState4},
+ {src:s_HeroRun1},
+ {src:s_HeroRun2},
+ {src:s_HeroRun3},
+ {src:s_HeroRun4},
+ {src:s_HeroRun5},
+ {src:s_HeroRun6},
+ {src:s_HeroRun7},
+ {src:s_HeroRun8},
+ {src:s_HeroRun9},
+ {src:s_HeroRun10},
+ {src:s_HeroRun11},
+ {src:s_HeroAttack1},
+ {src:s_HeroAttack2},
+ {src:s_HeroAttack3},
+ {src:s_HeroAttack4},
+ {src:s_HeroAttack5},
+ {src:s_HeroAttackJ1},
+ {src:s_HeroAttackJ2},
+ {src:s_HeroAttackJ3},
+ {src:s_HeroAttackJ4},
+ {src:s_HeroAttackJ5},
+ {src:s_HeroAttackJ6},
+ {src:s_HeroAttackJ7},
+ {src:s_HeroAttackJ8},
+ {src:s_HeroAttackT1},
+ {src:s_HeroAttackT2},
+ {src:s_HeroAttackT3},
+
+ {src:s_Robot1},
+ {src:s_Robot2},
+ {src:s_Robot3},
+ {src:s_RobotState1},
+ {src:s_RobotState2},
+ {src:s_RobotState3},
+ {src:s_RobotState4},
+ {src:s_RobotRun1},
+ {src:s_RobotRun2},
+ {src:s_RobotRun3},
+ {src:s_RobotRun4},
+ {src:s_RobotRun5},
+ {src:s_RobotRun6},
+ {src:s_RobotAttack1},
+ {src:s_RobotAttack2},
+ {src:s_RobotAttack3},
+ {src:s_RobotAttack4},
+ {src:s_RobotAttack5},
+
+ //plist
+
+ //fnt
+ {src:s_futura48},
+ {src:s_fnt_futura48}
+
+ //tmx
+
+ //bgm
+
+ //effect
+];