[cocos2d-js]chipmunk例子(二)
var TAG_SPRITE_BALL = ;
var TAG_SPRITE_USER = ;
var TAG_SPRITE_NPC = ;
var PTM_RATIO = ;
var GRABABLE_MASK_BIT = <<;
var NOT_GRABABLE_MASK = ~GRABABLE_MASK_BIT; var MainLayer = cc.Layer.extend({
_ball:null,
_man:null,
_rpc:null,
_leftGoal:null,
_rightGoal:null,
_leftPower:null,
_rightPower:null,
_time:, space:null, ctor:function () {
this._super();
var size = cc.director.getWinSize(); this._ball = new Ball();
this._ball.x = size.width / ;
this._ball.y = size.height / ;
this.addChild(this._ball); // 左方向
var btnLeft = cc.MenuItemImage.create(
res.btn_left_up,
res.btn_left_down,
function () {
this._man.runLeft();
}, this);
btnLeft.x = ; // 右方向
var btnRight = cc.MenuItemImage.create(
res.btn_right_up,
res.btn_right_down,
function () {
this._man.runRight();
}, this);
btnRight.x = ; // power
var btnPower = cc.MenuItemImage.create(
res.btn_power_up,
res.btn_power_down,
function () {
this._man.power();
}, this);
btnPower.x = ; // jump
var btnJump = cc.MenuItemImage.create(
res.btn_jump_up,
res.btn_jump_down,
function () {
this._man.jump();
}, this);
btnJump.x = ; // kick
var btnKick = cc.MenuItemImage.create(
res.btn_kick_up,
res.btn_kick_down,
function () {
this._man.kick();
}, this);
btnKick.x = ; // 暂停
var btnPause = cc.MenuItemImage.create(
"res/pause.png",
"res/pause2.png",
function () {
this.onStop();
}, this);
btnPause.x = size.width - ;
btnPause.y = size.height - ; var menu = cc.Menu.create(btnLeft, btnRight, btnPower, btnJump, btnKick, btnPause);
menu.x = ;
menu.y = ;
this.addChild(menu, ); // 主角
this._man = new Footballer_cn();
this._man.flippedX = true;
this._man.x = ;
this._man.y = ;
this._man.anchorX = 0.5;
this._man.anchorY = ;
this.addChild(this._man,,TAG_SPRITE_USER);
this._npc = new Footballer_br();
this._npc.x = size.width - ;
this._npc.y = ;
this._npc.anchorX = 0.5;
this._npc.anchorY = ;
this.addChild(this._npc,,TAG_SPRITE_NPC); // 球门
this._leftGoal = new Goalpost(true);
this._leftGoal.x = ;
this._leftGoal.y = ;
this._leftGoal.anchorX = ;
this._leftGoal.anchorY = ;
this.addChild(this._leftGoal); this._rightGoal = new Goalpost();
this._rightGoal.x = size.width;
this._rightGoal.y = ;
this._rightGoal.anchorX = ;
this._rightGoal.anchorY = ;
this.addChild(this._rightGoal); // power
this._leftPower = new PowerProgress(size.width/-,size.height-,,0.5,this);
this.addChild(this._leftPower, );
this._rightPower = new PowerProgress(size.width/+,size.height-,,0.5,this);
this.addChild(this._rightPower, ); // 系统计划任务,即每帧调用update函数
this.scheduleUpdate();
// 自定义计划任务
this.schedule(this.uiSchedule, ); cc.sys.dumpRoot();
cc.sys.garbageCollect(); this.initChipmunk(); return true;
},
onStop:function () {
this._bStop = !this._bStop;
if (this._bStop == true) {
cc.director.pause();
}
else {
cc.director.resume();
}
}, update:function (dt) {
this.space.step(dt);
},
uiSchedule:function () {
this._time++;
this._leftPower.showPower();
this._rightPower.showPower();
},
initChipmunk:function() {
this.space = new cp.Space();
var sprite = this.createPhysicsSprite( cc.p(cc.director.getWinSize().width/ , cc.director.getWinSize().height-) );
this.addChild( sprite, ); this.addWalls();
this.space.gravity = cp.v(, -);
},
initPhysics:function() {
var space = this.space ;
var staticBody = space.staticBody;
var winSize = cc.director.getWinSize(); // Walls
var walls = [ new cp.SegmentShape( staticBody, cp.v(,), cp.v(winSize.width,), ), // bottom
new cp.SegmentShape( staticBody, cp.v(,winSize.height), cp.v(winSize.width,winSize.height), ), // top
new cp.SegmentShape( staticBody, cp.v(,), cp.v(,winSize.height), ), // left
new cp.SegmentShape( staticBody, cp.v(winSize.width,), cp.v(winSize.width,winSize.height), ) // right
];
for( var i=; i < walls.length; i++ ) {
var shape = walls[i];
shape.setElasticity();
shape.setFriction();
space.addStaticShape( shape );
} // Gravity
space.gravity = cp.v(, -);
},
addWalls:function() {
// Walls
var winSize = cc.director.getWinSize();
var walls = [ new cp.SegmentShape( this.space.staticBody, cp.v(,), cp.v(winSize.width,), ), // bottom
new cp.SegmentShape( this.space.staticBody, cp.v(,winSize.height), cp.v(winSize.width,winSize.height), ), // top
new cp.SegmentShape( this.space.staticBody, cp.v(,), cp.v(,winSize.height), ), // left
new cp.SegmentShape( this.space.staticBody, cp.v(winSize.width,), cp.v(winSize.width,winSize.height), ) // right
];
for( var i=; i < walls.length; i++ ) {
var shape = walls[i];
shape.setElasticity(0.8);
shape.setFriction(0.1);
this.space.addStaticShape( shape );
}
},
createPhysicsSprite:function( pos ) { var radius = ;
var mass = ; var body = new cp.Body(mass, cp.momentForCircle(mass, , radius,cp.v(, )));
body.setPos( pos );
this.space.addBody( body );
var shape = new cp.CircleShape(body, radius,cp.v(, )); //new cp.BoxShape( body, 48, 108);
shape.setElasticity( );
shape.setFriction( 0.1 ); this.space.addShape( shape ); var sprite = cc.PhysicsSprite.create(res.b_ball_01);
sprite.setBody( body );
return sprite;
},
setupDebugNode:function()
{
// debug only
this._debugNode = cc.PhysicsDebugNode.create( this.space );
this._debugNode.visible = false ;
this.addChild( this._debugNode );
}
}); var MainScene = cc.Scene.extend({
onEnter:function () {
this._super();
this.addChild(new GameBackgroundLayer());
this.addChild(new MainLayer());
}
});
[cocos2d-js]chipmunk例子(二)的更多相关文章
- 【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨
原文:[高德地图API]从零开始学高德JS API(二)地图控件与插件——测距.圆形编辑器.鼠标工具.地图类型切换.鹰眼鱼骨 摘要:无论是控件还是插件,都是在一级API接口的基础上,进行二次开发,封装 ...
- qrcode.js 动态生成二维码
用qrcode.js动态生成二维码图片非常简单,只需要引入qrcode.js即可使用,而且可以自定义图片大小.背景色等信息. 1.jsp代码---页面头部引入qrcode.js,jquery文件可选 ...
- node.js 初学(二)—— 搭建注册/登录服务器
node.js 初学(二)—— 搭建注册/登录服务器 理论上来说,代码实现在理论和实际上是一样的.但实际上来说,他们不是 做一个最简单的用户注册登录功能 1.接口定义: 注册:/user?act=re ...
- js生成简单二维码
js文件下载地址:https://download.csdn.net/download/weixin_38296752/10554485 一.引入qrcode.js文件 <script type ...
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
- js生成中文二维码
http://www.cnblogs.com/xcsn/archive/2013/08/14/3258035.html http://www.jb51.net/article/64928.htm 使用 ...
- cocos2d js jsb XMLHttpRequest 中文乱码
1.首先讲下怎样使用XMLHttpRequest 下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中. 首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另 ...
- cocos2d js的一些tip
cocos2d-js-v3.2-rc0 cc.director.end();//退出app cc.Application.getInstance().openURL("http://www. ...
- cocos2d js ClippingNode 制作标题闪亮特效
1.效果图: 之前在<Android 高仿 IOS7 IPhone 解锁 Slide To Unlock>中制作了文字上闪亮移动的效果,这次我们来看下怎样在cocos2d js 中做出类似 ...
- Cordova app 检查更新 ----JS进行调用(二)
原文:Cordova app 检查更新 ----JS进行调用(二) 1.获取版本号 需要添加 插件 cordova plugin add https://github.com/whiteoctober ...
随机推荐
- git项目实战常用workflow和命令
一个从无到有的项目大体经历-创建项目目录,创建repo,配置过滤集,配置git user,导入已有基础代码入库,将库放到central去,建立分支,修改代码,checkin代码,分支上 测试验证代码, ...
- Machine Learning for hackers读书笔记(四)排序:智能收件箱
#数据集来源http://spamassassin.apache.org/publiccorpus/ #加载数据 library(tm)library(ggplot2)data.path<-'F ...
- ASP.NET MVC+EasyUI+Entity FrameWork 整合开发
本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...
- 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]
Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加 ...
- UVa 409 Excuses, Excuses!
哈哈,虽然是一道字符串水题,可是拿到一个1A还是很开心的! 题意就是给一些keywords(子串)和Excuse(母串),然后输出包含keywords最多的Excuse,如果相等的话,按任意顺序全部输 ...
- 漫游Kafka入门篇之简单介绍
介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以 ...
- 梯度下降之随机梯度下降 -minibatch 与并行化方法
问题的引入: 考虑一个典型的有监督机器学习问题,给定m个训练样本S={x(i),y(i)},通过经验风险最小化来得到一组权值w,则现在对于整个训练集待优化目标函数为: 其中为单个训练样本(x(i),y ...
- Edit Control的Enter响应函数
Edit Control的Enter响应函数 在dialog中添加edit control ,选择“Multi_Line mode” MFC Class Wizard中添加Virtual Fu ...
- javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)
前言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 本章可能是讲解javamail的最后一 ...
- Android中的事件分发和处理
上次跟大家分享了一下自定义View的一下要点,这次跟大家聊一下View的事件分发及处理,为什么主题都是View,因为作为一名初级应用层Android工程师,跟我打交道最多的莫过于各种各样的View,只 ...