一、写在前面的话

最近在学习cocos2d-html5方面的知识,一直想从事游戏方面的工作,自己也找了好多资料。网上关于cocos2d-html5的教程真的不多,也只有自己摸索,慢慢看示例代码。由于本人没有mac,所以呢就用不了cocosbuild来制作动画相关的啦,不过今天又发现一个东西就是可以采用虚拟机来转mac系统,呵呵,明天继续试试。如果你也在学习或从事cocos2d-html5方面东西,希望大家都相互交流,共同进步啊。

二、橡皮筋制作

这部分的主要内容是制作橡皮筋,石头放在弹弓上,用手拉弹弓,让石头弹出去。

需要准备的资源有弹弓、石头、背景

最终效果图:

三、详细分解

1、制作背景(制作背景的代码过于简单,没什么多说的就直接上代码了)

//背景
var BackSprite = cc.Sprite.extend({
ctor:function(){
this._super();
this.initWithFile(s_bg);
this.setAnchorPoint(cc.p(0,0));
this.setPosition(cc.p(0,0));
}
});

2、制作石头,这步比较复杂也是核心的一部分

1)首先必须把石头加载到场景中,位置设置在弹弓之间

2)事件的捕捉,当触发Touch事件的时候,判断当前位置是否在石头的矩形范围之类,当事件移动的时候,获取当前事件的

位置,并且设置石头的位置,此时有个核心的东西就是用画笔画出橡皮筋,从石头到弹弓两端点之间。

3)当事件END的时候,石头必须弹出去,给石头一个方向向量,计算石头当前位置和弹弓顶端中间点的角度。从而让石头射出去。

源代码:

//石头
var StoneSprite = cc.Sprite.extend({
mainLayer:null,
_isPullEnd:false,
_isPulling:false,
_velocity:null,
_stonePoint:null,
ctor:function(){
this._super(); //初始化
this.initWithFile(s_stone); //设置事件
cc.Director.getInstance().getTouchDispatcher().addTargetedDelegate(this,0,true); //初始向量
this._velocity = cc.p(800,800); this.scheduleUpdate();
},
onTouchBegan:function(touch,event){
if(!this.containsTouchLocation(touch)){
this.mainLayer.reset();
this._isPulling = false;
this._isPullEnd = false; return false;
}
this._isPulling = true;
this._isPullEnd = false;
return true;
},
onTouchMoved:function(touch, event){
var touchPoint = touch.getLocation();
this.setPosition(touchPoint);
this.mainLayer.drawLine();
},
onTouchEnded:function(){
this._isPullEnd = true; var hitAngle = cc.pToAngle(cc.pSub(cc.p(this.mainLayer._slingshot.getPositionX(),
FLOOR_HEIGHT+this.mainLayer._slingshot.getPositionY()),this.getPosition()));
var scalarVelocity = cc.pLength(this._velocity);
this._velocity = cc.pMult(cc.pForAngle(hitAngle),scalarVelocity); this.mainLayer.clearDrawLine();
},
containsTouchLocation:function(touch){
//获取触摸点的位置
var touchPoint = touch.getLocation(); //获取当前对象的宽度
var contentSize = this.getContentSize(); //定义拖拽的区域
var myRect = cc.rect(0,0,contentSize.width,contentSize.height);
myRect.origin.x += this.getPosition().x - this.getContentSize().width/2;
myRect.origin.y += this.getPosition().y - this.getContentSize().height/2; return cc.rectContainsPoint(myRect,touchPoint);
},
update:function(dt){
if(this._isPullEnd&&this._isPulling){
this.setPosition(cc.pAdd(this.getPosition(),cc.pMult(this._velocity,dt)));
this.check();
}
},
check:function(){
//判断是否飞出了整个区域以外,如果是则重设石头
var size = cc.Director.getInstance().getWinSize();
if(this.getPositionX()>(size.width+20)||
this.getPositionX()<-20||this.getPositionY()>(size.height+20)
||this.getPositionY()<-20){
this.setPosition(this.mainLayer._stonePoint);
this._isPullEnd = false;
this._isPulling = false;
}
}
});

最后:可能做得不是很好,但后面会慢慢完善,也会发到网上供大家参考,源码下载地址:
下载

coco2d-html5制作弹弓射鸟第一部分---橡皮筋的更多相关文章

  1. 程序员用HTML5制作的爱心树表白动画

    体验效果:http://keleyi.com/keleyi/phtml/html5/31.htm 推荐:http://hovertree.com/texiao/css3/18/ HTML代码如下: & ...

  2. 使用HTML5制作loading图

    昨天发了一篇使用HTML5 canvas写的时钟的文章,今天发一篇关于使用HTML5制作loading图的文章. <!DOCTYPE html> <html> <head ...

  3. 使用HTML5制作时钟

    之前看到别人用HTML5制作时钟,自己也写了一个,这是很久以前写的了,没有注释,现在自己看都晕了(注释的重要性就体现在这边了),找时间加上注释,让自己和别人都比较好理解. <!DOCTYPE h ...

  4. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

  5. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  6. html5制作一个时钟

    试着用html5写一个时钟 记得开始这个随笔是几天前,一直保存在草稿里面,一直感觉有个东西搁在在那里,所以今天熬夜也要写完这篇博客!!!哈哈...不多说来上代码和思路. --------------- ...

  7. jquery+html5制作超酷的圆盘时钟表

    自己封装的一个用HTML5+jQuery写的时钟表 代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  8. 【HTML5校企公益课】第一天

    1.搭建基本的开发环境.学校电脑用的是浏览器是Chrome,编辑器是HBuilder. 2.初步介绍HTML5的Web项目基本结构. css:样式表 img:存放图片 js:存放脚本文件 .html: ...

  9. 基于html5制作3D拳击游戏源码下载

    今天给大家分享一款基于HTML5实现的3d拳王游戏源码.这款实例适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器. 在线预览 ...

随机推荐

  1. Spring 3.0就这么简单读书笔记

    一般情况下,spring容器中的大部分Bean都是单实例的,所以一般无须通过@Repository.@Service.@Component等注解的value属性为Bean指定名称,也无须使用@Qual ...

  2. Android学习手记(4) BroadcastReceiver监听电池信息

    Android 中,Broadcast是一种在应用程序之间进行传输信息的机制.BroadcastReceiver对发送过来的Broadcast进行过滤和响应.根据这种机制,我们可以获取电池现有电量等信 ...

  3. (转,感谢原作者!)既然选择了Linux,有何必在乎这些——Linux wine国服LOL英雄联盟,完美运行!!

    Linux下玩国服LOL,国服哦.网络上随处都可以搜到wine美服LOL的教程,但腾讯运营的国服客户端跟美服原版相差比较大,按照美服的方式不能搞起国服LOL,由于宿舍文化,这几天我专注于wine一个国 ...

  4. 监听tomcat服务器启动/关闭并从配置文件中读取参数进行初始化

    监听tomcat服务器启动/关闭很简单(2步): 1. 建立一个类实现ServletContextListener接口,重写其中的方法(contextDestroyed和contextInitiali ...

  5. STL-空间配置器(allocator)

    STL的空间配置器作为STL六大部件的重要组成部分,它总是隐藏在一切组件的背后.它主要负责动态空间的分配.释放等管理工作.整个STL的操作对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以置 ...

  6. 用命令行批处理bat,设置代理服务器、DNS、网关、WINS等

    http://hi.baidu.com/83050158/blog/item/50cbd63f9da79ccb7d1e711b.html 将下面代码复制到记事本,另存为NetSet.bat,修改相应i ...

  7. PHP生成数字+字符混合型字符串

    以下是一个用PHP随机生成字符+数字混合型的随机字符串,可用来生成会员ID.用户密码/密钥等内容,函数简单,代码如下: <?php function generate_rand($l){ $c= ...

  8. 【结构型】Composite模式

    组合模式意在将对象组合成树形结构以表示部分与整体的层次结构关系,并且用户对单个对象的操作以有对组合对象的操作都是一致的.即:组合对象 is-a 单个对象,同时又可以组合着 n 个的单个对象(甚至于其他 ...

  9. Java泛型的基本应用

    一.泛型概述 jdk1.5版本以后出现的新特性,用于解决安全问题,是一个安全机制. 好处: 1,将运行时期的问题ClassCastException转到了编译时期. 2,避免了强制转换的麻烦. 什么时 ...

  10. fabric自动化部署django

    使用fabric部署django应用 使用fabric部署django应用 本文是我的网站易读中文网自动化部署的脚本实现,以下代码在ubuntu和debian中测试通过 由于网站使用的是python技 ...