@H_301_3@ 引擎包目录结构:
1: 属性 方法都有.访问 2; 想似得: if switch {} new对像 cc.。。。。 3: var 相当于local
使用cocos2d-Js的特点: 快速(程序开发) 全平台
使用啥语言无所谓, 关键是经验: 如逻辑结构, 项目的架构/数据 Ui分离, 文件夹层次 网络@H_301_3@
@H_301_3@
[入门教程]使用Cocos2d-HTML5游戏引擎编写一个简单的游戏 @H_404_53@[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第二回合:运行Hello World@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第三回合:创建工程@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第四回合:添加场景@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第五回合:添加飞机@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第六回合:移动精灵@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第七回合:发射子d@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第八回合:添加敌机@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第九回合:碰撞检测@H_301_3@
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第十回合:游戏结束@H_301_3@
--------------------@H_301_3@@H_301_3@ @H_301_3@@H_301_3@ 类名字var Js没有文件之分, lua是有的;但放在函数中是用区别的 Cocos2d-Js 快速入门07_Cocos2d基础概念 --- 视频
***********************@H_301_3@@H_301_3@ @H_301_3@@H_301_3@ ------------------------------------------------------------- cocos2d-html5 碰撞检测的几种方法----------------------------------- 游戏中的碰撞还是比较多的,比如角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都需要@H_301_3@
进行碰撞的检测,来触发一定的事件@H_301_3@
最近在尝试制作一个小游戏的时候需要用到碰撞检测,然后就查了下资料,并在论坛进行提问等算是找到了比较满意的碰撞检测方法,这里记录下来@H_301_3@
现在自己知道的方法算是有了三种了,下面一一记录并分析下他们各自的优缺点@H_301_3@
1、就是官方提供的,根据getBoundingBox();方法获取要检测的碰撞物体的范围,然后再根据rectIntersectsRect();方法进行判断需要检测的两个精灵是否有重叠,有则发生碰撞;@H_301_3@
优点:适合对规则的矩形物体进行检测碰撞,简单,直接@H_301_3@
缺点:对于复杂图形不友好,对于碰撞的检测不准确,使用中有种莫名其妙的感觉@H_301_3@
[JavaScript] view plain copy print ? var@H_301_3@dollRect=sprite.getBoundingBox();@H_301_3@@H_301_3@ var@H_301_3@dollheadRect=@H_301_3@this@H_301_3@.catchHand.getBoundingBox();@H_301_3@@H_301_3@ if@H_301_3@(cc.rectIntersectsRect(dollRect,dollheadRect)){@H_301_3@@H_301_3@ //发生碰撞事件@H_301_3@@H_301_3@@H_301_3@ }@H_301_3@
2、第二种是在网上找到的,我感觉有些麻烦,不过相对于第一种,对于不规则物体支持的好了一些
这里根据BoundingBox 的 上下左右的中间点来判断碰撞,使检测的更准确一些@H_301_3@优点:使碰撞检测更准确一点@H_301_3@
缺点:麻烦@H_301_3@
var@H_301_3@Box1=sprite1.getBoundingBox();@H_301_3@@H_301_3@ var@H_301_3@bottom=cc.p(Box1.x+Box1.wIDth/2,Box1.y);@H_301_3@@H_301_3@ var@H_301_3@right=cc.p(Box1.x+Box1.wIDth,Box1.y+Box1.height/2);@H_301_3@@H_301_3@ var@H_301_3@left=cc.p(Box1.x,Box1.y+Box1.height/2);@H_301_3@@H_301_3@ var@H_301_3@top=cc.p(Box1.x+Box1.wIDth/2,Box1.y+Box1.height);@H_301_3@@H_301_3@ @H_301_3@ @H_301_3@ var@H_301_3@Box2=sprite2.getBoundingBox();@H_301_3@@H_301_3@ if@H_301_3@(cc.rectContainsPoint(Box2,left)||cc.rectContainsPoint(Box2,right)||cc.rectContainsPoint(Box2,top)||cc.rectContainsPoint(Box2,bottom)){@H_301_3@@H_301_3@ //发生碰撞@H_301_3@@H_301_3@@H_301_3@ }@H_301_3@
3、第三种就是我现在使用的,不过这个针对大小比较规矩,即接近正方形比较好,但是对于外形可以复杂@H_301_3@
这个碰撞检测就是要给精灵添加一个radius属性,设置精灵以中心为原点,radius为半径的碰撞区域,然后去判断两个精灵的中心点的距离是否小于radius之和,如果是则发生碰撞;@H_301_3@
优点:更准确,简单@H_301_3@
缺点:对于长的图片碰撞不友好@H_301_3@
想判断距离首先要知道一个方法:pdistance();这个方法是cocos2d-HTML5获取两个坐标点之间的方法,使用这个方法我们就可以获取两个精灵中心的距离@H_301_3@
var@H_301_3@sprite=@H_301_3@this@H_301_3@.dolls3[i];@H_301_3@@H_301_3@ var@H_301_3@distance=cc.pdistance(@H_301_3@this@H_301_3@.catchHand.getposition(),sprite.getposition());@H_301_3@@H_301_3@ var@H_301_3@radiusSum=sprite.radius+@H_301_3@this@H_301_3@.catchHand.radius;@H_301_3@@H_301_3@ cc.log("distance:"@H_301_3@+distance+@H_301_3@";radius:"@H_301_3@+radiusSum);@H_301_3@@H_301_3@ if@H_301_3@(distance<radiusSum){@H_301_3@@H_301_3@ }@H_301_3@ //针对第三三种方法又加深了一下,使得对矩形类的精灵也能有好的判断,@H_301_3@@H_301_3@@H_301_3@ //主要就是分别对X和Y方向设置不同的Radius,然后去进行分别判断@H_301_3@@H_301_3@@H_301_3@ var@H_301_3@distanceX=Math.abs(@H_301_3@this@H_301_3@.catchHand.getpositionX()-sprite.getpositionX());@H_301_3@@H_301_3@ var@H_301_3@distanceY=Math.abs(@H_301_3@this@H_301_3@.catchHand.getpositionY()-sprite.getpositionY());@H_301_3@@H_301_3@ var@H_301_3@radiusYSum=sprite.radiusY+@H_301_3@this@H_301_3@.catchHand.radius;@H_301_3@@H_301_3@ if@H_301_3@(distanceX<sprite.radiusX&&distanceY<radiusYSum){@H_301_3@@H_301_3@ this@H_301_3@.catchDollSucceed(sprite);@H_301_3@@H_301_3@ return@H_301_3@;@H_301_3@@H_301_3@ }@H_301_3@
总结:综上所述,碰撞检测的方法不止一种,(应该还有其他的方法是我不知道的)在适合的时候选择合适的方法才是最好的,@H_301_3@
更多cocos2d-HTML5开发文章可以关注牛人 touchsNow的博客:http://blog.makeapp.co
也可以去我的个人博客站点:Melove 我爱http://www.melove.net
------------------------------------------------------------------------------------------------ cocos2d-html5开发之本地数据存储做游戏时经常需要的一个功能呢就是数据的保存了,比如游戏最高分、得到的金币数、物品的数量等等,cocos2d-HTML5使用了HTML5,所以HTML5的数据保存方法是对引擎可用的;
HTML5本地数据存储是使用Js对数据进行 *** 作,HTML5 对数据的存储提供了两个方法:
sessionStorage – 只对本次会话保留数据 localstorage – 长时间保留数据关于这个sessionStorage只在浏览器打开进行会话时可用,在游戏中没有测试,用法是和localstorage方法相同的,只是对数据保存的时间上不同;
其中localstorage 方法 对保留的数据没有时间限制,除非用户手动清理数据,也是我在游戏中常用的方法;
对数据的存储最常用的就是 getItem(”,”); 和setItem(”,”);这两个方法;
由此可见本地存储数据的方法很简单,就是简单的设置键(key)值(value)对,以及根据键(key)获取保存的值(value);
还有一点需要注意的就是 HTML5本地数据存储,只能保存字符串数据,无论你保存什么都会自动转换为字符串,所以如果要保存其他类型的数据的时候,要记得进行数据转换,
这里我写一个保存和读取Json数据的例子:
//这是一个保存娃娃数量的Json数据@H_301_3@dollNum @H_301_3@=@H_301_3@ @H_301_3@{@H_301_3@ArIEs@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Taurus@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@gemini@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Cancer@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Leo@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Virgo@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@libra@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Scorpius@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Sagittarius@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Capricornus@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Aquarius@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@,@H_301_3@ @H_301_3@Pisces@H_301_3@:@H_301_3@ @H_301_3@0@H_301_3@};@H_301_3@@H_301_3@/** * 保存Doll数量,要保存Json数据的时候,需要使用JsON.stringify();方法将JsON转化为字符串 */@H_301_3@@H_301_3@function@H_301_3@ saveDollNum@H_301_3@(){@H_301_3@ @H_301_3@var@H_301_3@ tempDollNum @H_301_3@=@H_301_3@ JsON@H_301_3@.@H_301_3@stringify@H_301_3@(@H_301_3@dollNum@H_301_3@);@H_301_3@ sys@H_301_3@.@H_301_3@localstorage@H_301_3@.@H_301_3@setItem@H_301_3@(@H_301_3@"dollNum"@H_301_3@,@H_301_3@ tempDollNum@H_301_3@);@H_301_3@@H_301_3@}@H_301_3@@H_301_3@/** * 加载Doll数量 和 keys;然后再读取过后,需要用JsON.parse();方法将字符串转化为JsON */@H_301_3@@H_301_3@function@H_301_3@ loadDollNum@H_301_3@()@H_301_3@ @H_301_3@{@H_301_3@ @H_301_3@var@H_301_3@ tempDollNum @H_301_3@=@H_301_3@ sys@H_301_3@.@H_301_3@localstorage@H_301_3@.@H_301_3@getItem@H_301_3@(@H_301_3@"dollNum"@H_301_3@);@H_301_3@ @H_301_3@if@H_301_3@(@H_301_3@