http://www.cocoachina.com/bbs/read.PHP?tid=220250
管理提醒:本帖被 superdragon 执行加亮操作(2014-08-27)
分别用Box2d和chipmunk实现了一下,不过Box2d没整理,也懒得整理了。
chipmunk整理了一下,分享给大家吧。
演示地址: http://121.40.100.196/box/
刚开始研究,抛砖引玉
简要说明:
1、初始化物理环境,增加边界
2、物体形状测试
3、物体定义
initBoxWithBody: @H_301_109@
4、增加点击事件、碰撞检测监听
onEnter: @H_301_109@
5、碰撞检测
collisionBegin : @H_301_109@
chipmunk整理了一下,分享给大家吧。
演示地址: http://121.40.100.196/box/
刚开始研究,抛砖引玉
简要说明:
1、初始化物理环境,增加边界
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
27
28
29
30
|
staticBody = space.staticBody;@H_301_109@
//this.initDebugMode();@H_301_109@
// Gravity@H_301_109@
// Walls--四个边界@H_301_109@
walls = [ @H_301_109@
// top@H_301_109@
// left@H_301_109@
301_109@
];@H_301_109@
shape = walls<i>;@H_301_109@
//space.addStaticShape( shape );@H_301_109@
space.addShape( shape );@H_301_109@
shape.setCollisionType(3);@H_301_109@
}@H_301_109@
shape.setLayers(1);@H_301_109@
}@H_301_109@
},</i>@H_301_109@
|
2、物体形状测试
3、物体定义
//物体的定义@H_301_109@
mass = 1;@H_301_109@
body.setPos( cc.p(winSize.width/2,winSize.height/2) );@H_301_109@
.space.addBody( body );@H_301_109@
shape.setElasticity( 0.5 );@H_301_109@
shape.setFriction( 0.3 );@H_301_109@
shape.setCollisionType(1);@H_301_109@
shape.setLayers(3);@H_301_109@
.space.addShape( shape );@H_301_109@
//创建一个箱子@H_301_109@
//上下移动@H_301_109@
moveTo2 = cc.MoveTo.create(0.5,monospace!important; font-size:1em!important; min-height:inherit!important; color:black!important; background:none!important">.Box.y - 40);@H_301_109@
.downUpAction = cc.RepeatForever.create(cc.Sequence.create(moveTo1,moveTo2));@H_301_109@
301_109@
4、增加点击事件、碰撞检测监听
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
._super();@H_301_109@
cc.sys.dumpRoot();@H_301_109@
cc.sys.garbageCollect();@H_301_109@
//事件处理@H_301_109@
cc.eventManager.addListener({@H_301_109@
event: cc.EventListener.TOUCH_ALL_AT_ONCE,@H_301_109@
event.getCurrentTarget().processEvent( touches[0] );@H_301_109@
}@H_301_109@
);@H_301_109@
cc.eventManager.addListener({@H_301_109@
event: cc.EventListener.MOUSE,@H_301_109@
event.getCurrentTarget().processEvent( event );@H_301_109@
}@H_301_109@
);@H_301_109@
}@H_301_109@
//重置数据@H_301_109@
.resetDatas();@H_301_109@
//@H_301_109@
.scheduleUpdate();@H_301_109@
.space.addCollisionHandler( 1,2,@H_301_109@
.collisionPre.bind(@H_301_109@
301_109@
.collisionPost.bind(@H_301_109@
301_109@
);@H_301_109@
301_109@
301_109@
301_109@
301_109@
)@H_301_109@
);@H_301_109@
301_109@
301_109@
301_109@
301_109@
)@H_301_109@
);@H_301_109@
301_109@
5、碰撞检测
( arbiter,space ) {@H_301_109@
shapes = arbiter.getShapes();@H_301_109@
shapeA = shapes[0];@H_301_109@
shapeB = shapes[1];@H_301_109@
collTypeA = shapeA.collision_type;@H_301_109@
collTypeB = shapeB.collision_type;@H_301_109@
(collTypeB == 3){@H_301_109@
.gameOver();@H_301_109@
}@H_301_109@
301_109@
collisionPre : @H_301_109@
301_109@
//console.log('collision pre');@H_301_109@
;@H_301_109@
301_109@
collisionPost : @H_301_109@
301_109@
//console.log('collision post');@H_301_109@
301_109@
collisionSeparate : @H_301_109@
301_109@
//console.log('collision separate');@H_301_109@
}@H_301_109@