Box2D是一套优秀的动力学解算系统,可以与Papervision3D很好的结合。下面我们就用Papervision3D+Box2D来做一个基本的例子:Hello World!
【http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
示例如下:
这个动力学系统跟Wow的思路是一样的,都是植入式的动力学运算,3d的物体只要捆绑着在它的动力学原型就能实现动力学的效果。
下面是源代码,希望对你有用。
package
{
import Box2D.Collision.Shapes.b2CircleDef;
import Box2D.Collision.Shapes.b2PolygonDef;
import Box2D.Collision.b2AABB;
import Box2D.Common.Math.b2Vec2;
import Box2D.Dynamics.b2Body;
import Box2D.Dynamics.b2BodyDef;
import Box2D.Dynamics.b2World;
import flash.events.Event;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.view.BasicView;
[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
public class Box2DFlashWithPapervision3D extends BasicView
{
private var WORLD_SCALE:Number = 30;
private var WIDTH:Number = 640;
private var HEIGHT:Number = 480;
private var world:b2World;
private var iterations:int = 10;
private var timeStep:Number = 1.0/30.0;
public function Box2DFlashWithPapervision3D()
{
setupPapervision3D();
createWorld();
createFloor();
createShapes();
startRendering();
}
private function setupPapervision3D():void
{
camera.focus = 10;
camera.zoom = 100;
}
private function createWorld():void {
var worldBounds:b2AABB = new b2AABB();
worldBounds.lowerBound = new b2Vec2( 0, 0 );
worldBounds.upperBound = new b2Vec2(WIDTH/WORLD_SCALE, HEIGHT/WORLD_SCALE);
var gravity:b2Vec2 = new b2Vec2(0, 10);
var sleep:Boolean = true;
world = new b2World(worldBounds, gravity, sleep);
}
private function createFloor():void
{
// Create border of boxes
var floorShapeDef:b2PolygonDef = new b2PolygonDef();
var floorBodyDef:b2BodyDef = new b2BodyDef();
var floor:b2Body;
//bottom shape definition
floorShapeDef.SetAsBox((WIDTH+40)/WORLD_SCALE/2, 100/WORLD_SCALE);
// Bottom
floorBodyDef.position = new b2Vec2(WIDTH/WORLD_SCALE/2, (HEIGHT+95)/WORLD_SCALE);
floor = world.CreateBody(floorBodyDef);
floor.CreateShape(floorShapeDef);
floor.SetMassFromShapes();
}
private function createShapes():void
{
for (var i:Number = 0; i < 20; i++)
{
//radius for physics circle and sphere
var radius:Number = Math.random() * 50 + 10;
var bodyDef:b2BodyDef = new b2BodyDef();
//random position toward the top of the stage
bodyDef.position = new b2Vec2(Math.random() * WIDTH / WORLD_SCALE, Math.random() * 50 /WORLD_SCALE);
var body:b2Body = world.CreateBody(bodyDef);
var shapeDef:b2CircleDef = new b2CircleDef();
shapeDef.radius = radius/WORLD_SCALE;
shapeDef.density = 1;
shapeDef.friction = .7;
shapeDef.restitution = .7;
body.CreateShape(shapeDef);
body.SetMassFromShapes();
var sphere:Sphere = new Sphere(null, radius);
scene.addChild(sphere);
body.m_userData = sphere;
}
}
override protected function onRenderTick(event:Event=null):void
{
world.Step(timeStep, iterations);
//sets the position of any DisplayObject3D to the body position
for (var bb:b2Body = world.m_bodyList; bb; bb = bb.m_next)
{
if (bb.m_userData is DisplayObject3D)
{
bb.m_userData.x = bb.GetPosition().x * WORLD_SCALE - WIDTH * .5;
bb.m_userData.y = -bb.GetPosition().y * WORLD_SCALE + HEIGHT * .5;
bb.m_userData.rotationZ = -bb.GetAngle() * (180/Math.PI);
}
}
renderer.renderScene(scene, camera, viewport);
}
}
}
- 大小: 111 KB
分享到:
相关推荐
papervision3D与Box2D结合应用实例
NULL 博文链接:https://baixiaozhe.iteye.com/blog/310956
Papervision3D is a powerful real-time 3D engine for Flash. Papervision3D can take externally created 3D models and render them as Flash content, without requiring end-users to download or install an ...
Papervision3D 教程,pv3d,pv3d+Flex,pv3d中文帮助
这个是as3版本,如果有需要用as2版本的可以给我留言或者会用SVN的自己可以搞一个,哈. Papervision3D是一个基于ActionScript的开源项目,目的在于实现更加炫丽美观、功能强大的Flash 3D Web应用程序。尤其是去年...
Papervision3D_2.0.869.swc
例子来自于Flash3D研究所,超简易Papervision3D基础 Main.cs 小球加外部贴图 Main2.cs 物体的各种移动 (讲解移动/旋转/放大物体的方法) Main3.cs导入外部模型 (讲解如何从外部软件导入collada文件) Main4.cs pv...
Papervision3D_2.1.932.swcPapervision3D_2.1.932.swcPapervision3D_2.1.932.swc
Papervision3D Essentials 中文版 翻译 第一章 docx格式
整理了Papervision3d的各方面资料,并且提供一个全景代码案例!
一个不错的Flash 3D引擎Papervisio3D,让你的flash从2D转化3D不再是难事.最新版本as3
Papervision3D的api,这个帮助文档介绍各种包的使用,有利于快速学习3D
《Papervision3D+Essentials》中文翻译
使用papervision3d引擎做的7个实例源码
希望对学习PV3D引擎的人提供点帮助。这是一pv3D的api电子书
Papervision3D Essentials (PV3D)的中文版电子书及 书中实例源码下载 PV3D FLEX 三维渲染必备开源包
有关papervision3D学习资料,例子(网上博客等资源)等等等
papervision3d 精髓,入门者必备,最新版本
Papervision3D Essentials source code2
papervisiion3d sdk,开发环境myeclipse+flex+pv3d