Nape2.0.3刚体贴图教程
我在用Body.graphic属性实现Nape刚体贴图向大家介绍了Nape贴图的方法,不过教程中用的Nape是2.0版的,作者在2012-12-13的时候2.0.3版,因为执行效率问题,删除了Body.graphic属性,很多网友也提出了这个问题,今天我们就来学习一下Nape 2.0.3版的贴图方法。
在上一篇教程中我说过Box2D的更新贴图的方法,Nape 2.0.3中也借鉴了Box2D里的方法:遍历所有的刚体,在ENTER_FRAME事件处理函数中,根据刚体的坐标和角度实时更新贴图的属性。具体的步骤如下:
创建刚体时添加贴图:
- Nape 2.0.3的Body对象多了一个userData属性,它是一个Object对象,在创建刚体时,添加userData的动态属性graphic,并用贴图对象赋值。
box.userData.graphic=userData;
在ENTER_FRAME事件处理函数中更新贴图:
- 通过Nape世界的space.liveBodies获取存储所有的活动刚体一个BodyList对象。
- 遍历这个BodyList对象,并通过BodyList.at(index)方法获取每个刚体的引用,同时获取贴图对象引用
- 用刚体的坐标和角度更新贴图的属性,实时更新贴图
protected function loop(event:Event):void { napeWorld.step(1/60); debug.clear(); debug.draw(napeWorld); debug.flush(); //实时更新贴图 //1.通过Nape世界的space.liveBodies获取存储所有的活动刚体一个BodyList对象。 for (var i:int = 0; i < napeWorld.liveBodies.length; i++) { //2.遍历这个BodyList对象,并通过BodyList.at(index)方法获取每个刚体的引用,同时获取贴图对象引用 var body:Body = napeWorld.liveBodies.at(i); var graphic:Sprite = body.userData.graphic; //3.用刚体的坐标和角度更新贴图的属性,实时更新贴图 graphic.x = body.position.x; graphic.y = body.position.y; graphic.rotation = (body.rotation * 180 / Math.PI) % 360; } }
完成上面的两个步骤,就可以实现Nape 2.0.3刚体贴图了。允许的效果与上一篇教程是一样的。点击舞台并拖动鼠标绘制矩形,同时按下shift绘制5边形,同时按下ctrl绘制圆形。
[swfobject]760[/swfobject]
源代码部分只是更新了AbstractNapeTest中创建刚体,和loop函数中更新贴图的部分,基本上和上面的两个步骤是一样的,我就不贴出来了,大家下载源代码来看吧。
联系作者
挺不错啊!
拉登大叔~就是那么给力
拉登大叔, 刚体与刚体之间不碰撞,刚体只能与墙壁碰撞,这个是什么属性啊?
设置刚体的碰撞filter,回头我会专门写教程讲解的!
谢谢支持!大家的支持是我无限的动力!
可是要怎么删除贴图
贴图的偏移怎么设置呢? 对于不规则多边形来说
贴图是要单独addChild到显示列表里吗。移除Body的时候还要单独移除一遍贴图吗?
是的,这个是不可避免的 ,贴图是需要单独删除的