cocos2d-js基础 本地数据存储 碰撞检测几种方法
2015-02-09 10:32
447 查看
引擎包含2部分: cocos2d-html5 + cocos2d-x 2部分组成,所以全平台运行
引擎包目录结构:
1: 属性 方法都有.访问
2; 想似得: if switch {} new对像 cc.。。。。
3: var 相当于local
使用cocos2d-Js的特点: 快速(程序开发) 全平台
使用啥语言无所谓, 关键是经验: 如逻辑结构, 项目的架构/数据 Ui分离, 文件夹层次 网络
--------------------
类名字var JS没有文件之分, lua是有的; 但放在函数中是用区别的
Cocos2d-JS 快速入门07_Cocos2d基础概念 --- 视频
***********************
-------------------------------------------------------------cocos2d-html5
碰撞检测的几种方法-----------------------------------
游戏中的碰撞还是比较多的,比如角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都需要
进行碰撞的检测,来触发一定的事件
最近在尝试制作一个小游戏的时候需要用到碰撞检测,然后就查了下资料,并在论坛进行提问等算是找到了比较满意的碰撞检测方法,这里记录下来
现在自己知道的方法算是有了三种了,下面一一记录并分析下他们各自的优缺点
1、就是官方提供的,根据getBoundingBox();方法获取要检测的碰撞物体的范围,然后再根据rectIntersectsRect();方法进行判断需要检测的两个精灵是否有重叠,有则发生碰撞;
优点:适合对规则的矩形物体进行检测碰撞,简单,直接
缺点:对于复杂图形不友好,对于碰撞的检测不准确,使用中有种莫名其妙的感觉
[javascript] view
plaincopyprint?
var dollRect = sprite.getBoundingBox();
var dollHeadRect = this.catchHand.getBoundingBox();
if(cc.rectIntersectsRect(dollRect, dollHeadRect)){
//发生碰撞事件
}
2、第二种是在网上找到的,我感觉有些麻烦,不过相对于第一种,对于不规则物体支持的好了一些
这里根据BoundingBox 的 上下左右的中间点来判断碰撞,使检测的更准确一些
优点:使碰撞检测更准确一点
缺点:麻烦
[javascript] view
plaincopyprint?
var box1 = sprite1.getBoundingBox();
var bottom = cc.p(box1.x +box1.width / 2,box1.y);
var right = cc.p(box1.x +box1.width,box1.y +box1.height / 2);
var left = cc.p(box1.x,box1.y +box1.height / 2);
var top = cc.p(box1.x + box1.width / 2,box1.y + box1.height);
var box2 = sprite2.getBoundingBox();
if(cc.rectContainsPoint(box2, left)||cc.rectContainsPoint(box2, right)||cc.rectContainsPoint(box2, top)||cc.rectContainsPoint(box2, bottom)){
//发生碰撞
}
3、第三种就是我现在使用的,不过这个针对大小比较规矩,即接近正方形比较好,但是对于外形可以复杂
这个碰撞检测就是要给精灵添加一个radius属性,设置精灵以中心为原点,radius为半径的碰撞区域,然后去判断两个精灵的中心点的距离是否小于radius之和,如果是则发生碰撞;
优点:更准确,简单
缺点:对于长的图片碰撞不友好
想判断距离首先要知道一个方法:pDistance();这个方法是cocos2d-html5获取两个坐标点之间的方法,使用这个方法我们就可以获取两个精灵中心的距离
[javascript] view
plaincopyprint?
var sprite = this.dolls3[i];
var distance = cc.pDistance(this.catchHand.getPosition(), sprite.getPosition());
var radiusSum = sprite.radius + this.catchHand.radius;
cc.log("distance:" + distance + "; radius:" + radiusSum);
if(distance < radiusSum){
//发生碰撞
}
//针对第三三种方法又加深了一下,使得对矩形类的精灵也能有好的判断,
//主要就是分别对X和Y方向设置不同的Radius,然后去进行分别判断
var distanceX = Math.abs(this.catchHand.getPositionX() - sprite.getPositionX());
var distanceY = Math.abs(this.catchHand.getPositionY() - sprite.getPositionY());
var radiusYSum = sprite.radiusY + this.catchHand.radius;
if(distanceX < sprite.radiusX && distanceY < radiusYSum){
this.catchDollSucceed(sprite);
return;
}
总结:综上所述,碰撞检测的方法不止一种,(应该还有其他的方法是我不知道的)在适合的时候选择合适的方法才是最好的,
更多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数据的例子:
这样就可以一次保存多个数据,并且操作起来也方便
----------------------------------------------------------------------------------------------
文采
类名字var JS没有文件之分, lua是有的; 但放在函数中是用区别的
Cocos2d-JS 快速入门07_Cocos2d基础概念 --- 视频
引擎包目录结构:
1: 属性 方法都有.访问
2; 想似得: if switch {} new对像 cc.。。。。
3: var 相当于local
使用cocos2d-Js的特点: 快速(程序开发) 全平台
使用啥语言无所谓, 关键是经验: 如逻辑结构, 项目的架构/数据 Ui分离, 文件夹层次 网络
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第一回合: 搭建开发环境
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第二回合:运行Hello World
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第三回合:创建工程
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第四回合:添加场景
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第五回合:添加飞机
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第六回合:移动精灵
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第七回合:发射子弹
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第八回合:添加敌机
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第九回合:碰撞检测
[入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏
第十回合:游戏结束
--------------------类名字var JS没有文件之分, lua是有的; 但放在函数中是用区别的
Cocos2d-JS 快速入门07_Cocos2d基础概念 --- 视频
***********************
-------------------------------------------------------------cocos2d-html5
碰撞检测的几种方法-----------------------------------
游戏中的碰撞还是比较多的,比如角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都需要
进行碰撞的检测,来触发一定的事件
最近在尝试制作一个小游戏的时候需要用到碰撞检测,然后就查了下资料,并在论坛进行提问等算是找到了比较满意的碰撞检测方法,这里记录下来
现在自己知道的方法算是有了三种了,下面一一记录并分析下他们各自的优缺点
1、就是官方提供的,根据getBoundingBox();方法获取要检测的碰撞物体的范围,然后再根据rectIntersectsRect();方法进行判断需要检测的两个精灵是否有重叠,有则发生碰撞;
优点:适合对规则的矩形物体进行检测碰撞,简单,直接
缺点:对于复杂图形不友好,对于碰撞的检测不准确,使用中有种莫名其妙的感觉
[javascript] view
plaincopyprint?
var dollRect = sprite.getBoundingBox();
var dollHeadRect = this.catchHand.getBoundingBox();
if(cc.rectIntersectsRect(dollRect, dollHeadRect)){
//发生碰撞事件
}
2、第二种是在网上找到的,我感觉有些麻烦,不过相对于第一种,对于不规则物体支持的好了一些
这里根据BoundingBox 的 上下左右的中间点来判断碰撞,使检测的更准确一些
优点:使碰撞检测更准确一点
缺点:麻烦
[javascript] view
plaincopyprint?
var box1 = sprite1.getBoundingBox();
var bottom = cc.p(box1.x +box1.width / 2,box1.y);
var right = cc.p(box1.x +box1.width,box1.y +box1.height / 2);
var left = cc.p(box1.x,box1.y +box1.height / 2);
var top = cc.p(box1.x + box1.width / 2,box1.y + box1.height);
var box2 = sprite2.getBoundingBox();
if(cc.rectContainsPoint(box2, left)||cc.rectContainsPoint(box2, right)||cc.rectContainsPoint(box2, top)||cc.rectContainsPoint(box2, bottom)){
//发生碰撞
}
3、第三种就是我现在使用的,不过这个针对大小比较规矩,即接近正方形比较好,但是对于外形可以复杂
这个碰撞检测就是要给精灵添加一个radius属性,设置精灵以中心为原点,radius为半径的碰撞区域,然后去判断两个精灵的中心点的距离是否小于radius之和,如果是则发生碰撞;
优点:更准确,简单
缺点:对于长的图片碰撞不友好
想判断距离首先要知道一个方法:pDistance();这个方法是cocos2d-html5获取两个坐标点之间的方法,使用这个方法我们就可以获取两个精灵中心的距离
[javascript] view
plaincopyprint?
var sprite = this.dolls3[i];
var distance = cc.pDistance(this.catchHand.getPosition(), sprite.getPosition());
var radiusSum = sprite.radius + this.catchHand.radius;
cc.log("distance:" + distance + "; radius:" + radiusSum);
if(distance < radiusSum){
//发生碰撞
}
//针对第三三种方法又加深了一下,使得对矩形类的精灵也能有好的判断,
//主要就是分别对X和Y方向设置不同的Radius,然后去进行分别判断
var distanceX = Math.abs(this.catchHand.getPositionX() - sprite.getPositionX());
var distanceY = Math.abs(this.catchHand.getPositionY() - sprite.getPositionY());
var radiusYSum = sprite.radiusY + this.catchHand.radius;
if(distanceX < sprite.radiusX && distanceY < radiusYSum){
this.catchDollSucceed(sprite);
return;
}
总结:综上所述,碰撞检测的方法不止一种,(应该还有其他的方法是我不知道的)在适合的时候选择合适的方法才是最好的,
更多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数据 dollNum = {Aries: 0, Taurus: 0, Gemini: 0, Cancer: 0, Leo: 0, Virgo: 0, Libra: 0, Scorpius: 0, Sagittarius: 0, Capricornus: 0, Aquarius: 0, Pisces: 0}; /** * 保存Doll数量,要保存json数据的时候,需要使用JSON.stringify();方法将JSON转化为字符串 */ function saveDollNum(){ var tempDollNum = JSON.stringify(dollNum); sys.localStorage.setItem("dollNum", tempDollNum); } /** * 加载Doll数量 和 keys;然后再读取过后,需要用JSON.parse();方法将字符串转化为JSON */ function loadDollNum() { var tempDollNum = sys.localStorage.getItem("dollNum"); if(tempDollNum == null || tempDollNum == ""){ saveDollNum(); cc.log("default dollNum " + dollNum); }else{ tempDollNum = sys.localStorage.getItem("dollNum"); cc.log("get dollNum " + tempDollNum); } //将字符串转化为json tempDollNum = JSON.parse(tempDollNum); }
这样就可以一次保存多个数据,并且操作起来也方便
----------------------------------------------------------------------------------------------
文采
类名字var JS没有文件之分, lua是有的; 但放在函数中是用区别的
Cocos2d-JS 快速入门07_Cocos2d基础概念 --- 视频
相关文章推荐
- cocos2d - JS 本地存储数据
- Cocos2d-js 本地数据存储封装
- cocos2d-JS 本地存储数据(最高分设置)
- JS本地保存数据的几种方法
- JS本地存储数据的几种方式
- cocos2d-html5 碰撞检测的几种方法
- SQL Server存储多语言数据的几种方法
- mysql基础-将数据按列导出成文本方式的几种方法
- JS及POI将页面数据导出EXCLE文件的几种方法
- js删除数据的几种方法
- ios本地数据存储都有哪几种方式?
- Android中数据存储的几种方法
- cocos2d-x中几种存储数据的方式
- Cocos2d-X 游戏之碰撞检测的方法
- cocos2d-x中几种存储数据的方式
- Cocos2d-X 碰撞检测的使用方法
- cocos2d box2d 基础 知识 创建人物、金币、碰撞 检测
- 【Cocos2d-x-js系列】碰撞检测
- Android中数据存储的几种方法
- js创建调用ocx对象的几种方法,检测ocx是否可用