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 +];