`

物理模拟引擎box2D-3 如何让sprite 像body一样移动

 
阅读更多


package  
{
	import Box2D.Dynamics.b2World;
	
	/**
	 * ...
	 * @author ottoliu
	 */
	public class physicsVal 
	{
		public static const RATIO:Number = 30;
		
		private static var _world:b2World;
		
		public function physicsVal() 
		{
			
		}
		
		static public function get world():b2World { return _world; }
		
		static public function set world(value:b2World):void 
		{
			_world = value;
		}
		
	}
	
}


package  {
	
	import Box2D.Collision.b2AABB;
	import Box2D.Collision.Shapes.b2CircleDef;
	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.b2Body;
	import Box2D.Dynamics.b2BodyDef;
	import Box2D.Dynamics.b2World;
	import flash.display.MovieClip;	
	import flash.display.Sprite;
	import flash.events.Event;
	
	public class Puggle extends MovieClip {
		
		var _ballSprite:Sprite;
		var _ballBody:b2Body;
		
		public function Puggle() {
			// set physics world 
			setupWorld();
			
			makeBall();
			
			addEventListener(Event.ENTER_FRAME, newFrameListener);
		}
		
		private function newFrameListener(e:Event):void 
		{
			physicsVal.world.Step(1 / 30, 10);
			
			_ballSprite.x = _ballBody.GetPosition().x*physicsVal.RATIO;
			_ballSprite.y = _ballBody.GetPosition().y * physicsVal.RATIO;
			_ballSprite.rotation = _ballBody.GetAngle() * 180 / Math.PI;
		}
		
		private function makeBall():void
		{
			//ball sprite 
			_ballSprite = new BallSprite();
			addChild(_ballSprite);
			//create ball body
			var ballShapeDef:b2CircleDef = new b2CircleDef();
			ballShapeDef.radius = 15 / physicsVal.RATIO;
			ballShapeDef.density = 1.0;
			ballShapeDef.friction = 0.3;
			ballShapeDef.restitution = 0.2;
			
			var ballBodyDef:b2BodyDef = new b2BodyDef();
			ballBodyDef.position.Set(200/physicsVal.RATIO,10/physicsVal.RATIO);
			
			_ballBody = physicsVal.world.CreateBody(ballBodyDef);
			_ballBody.CreateShape(ballShapeDef);
			_ballBody.SetMassFromShapes();
			
			}
		
		private function setupWorld():void
		{
			//world size 
			var worldSize:b2AABB = new b2AABB();
			worldSize.lowerBound.Set(-5000/physicsVal.RATIO,-5000/physicsVal.RATIO);
			worldSize.upperBound.Set(5000 / physicsVal.RATIO, 5000 / physicsVal.RATIO);
			
			//gravity
			var gravity:b2Vec2 = new b2Vec2(0.0,9.8);
			//sleep?
			var doSleep:Boolean = true;
			
			physicsVal.world = new b2World(worldSize, gravity, doSleep);
		}
	}
	
}

分享到:
评论

相关推荐

    cocos2d-x box2d 物理引擎

    《cocos2d-x与Box2D:构建基础物理引擎》 在游戏开发领域,物理引擎扮演着至关重要的角色,它赋予游戏中的对象以真实世界中的运动规律,从而增加游戏的真实感和趣味性。cocos2d-x是一个流行的开源2D游戏开发框架,...

    PhysicsEditor-Cocos2d-x-Box2d-master.zip_box2D_cocos2d_cocos2d x

    Cocos2d-x是一款强大的开源2D游戏引擎,而Box2D则是一个广泛使用的2D物理模拟库。将这两者结合使用,开发者可以轻松地创建出具有真实物理效果的游戏场景,让玩家体验到更加沉浸式的游戏环境。 Box2D,全称为"Box2D ...

    cocos2d-x box2d 弹球

    1. **刚体(Body)**:Box2D中的实体,可以设置为静态或动态,用于模拟物体的物理属性。 2. **形状(Shape)**:刚体可以附加多种形状,如圆形、矩形、多边形等,用于定义其几何特征。 3. **关节(Joint)**:连接两...

    《Box2dDemo》(Cocos2d-js)

    《Box2dDemo》是基于Cocos2d-js框架实现的一个物理引擎示例项目,它展示了如何使用Box2d库来模拟2D物理世界。Box2d是一个强大的开源物理引擎,广泛应用于游戏开发,可以创建复杂的动态场景,如碰撞检测、重力影响等...

    cocos2d-x3.x实现Flappy Bird

    Flappy Bird的物理模拟使用了Box2D轻量级物理引擎。你需要创建一个世界(World),定义小鸟和管道的Body类型(如动态Body和静态Body),并设置它们的物理属性,如重力、弹性等。 5. **碰撞检测**: Box2D提供了...

    Cocos2D-X游戏开发技术精解学习

    物理引擎是现代游戏不可或缺的一部分,Cocos2d-x集成了Box2D物理引擎,书中的章节将引导读者了解物理世界的设定,如刚体(Body)、形状(Shape)、关节(Joint)和碰撞检测,以实现真实的物理交互。 声音与音乐管理...

    基于cocos2d-2.0-x-2.0.3的游戏实例Stua(win版)

    Box2D是一个流行的2D物理引擎,它为游戏中的对象提供了真实的物理行为模拟,如重力、碰撞检测和动态运动。在Stua游戏中,Box2D可能被用来创建动态的场景,如角色的移动、物体的碰撞反应等。通过Cocos2d-x与Box2D的...

    cocos2d-x3.0rc0 中文API

    3.0版本集成的Box2D物理引擎,使得游戏开发可以实现真实的物理模拟。`b2World`、`b2Body`、`b2Fixture`等关键类的中文API描述,帮助开发者快速上手物理系统的构建和交互。 六、事件处理与触摸输入 cocos2d-x提供了...

    Box2D刚体绑定精灵

    在Box2D中,刚体(Body)是物理世界的主体,它可以是静态的(不会移动,如地面)或动态的(会受到力的影响,如角色)。刚体可以有形状(Fixture),这些形状定义了刚体的外观和碰撞检测。常见的形状有圆形(Circle...

    Box2D篮球小游戏

    3. **游戏对象的创建与交互**:在Box2D中,篮球通常被表示为“Body”对象,可能包含一个或多个“Fixture”来定义其形状和物理属性。开发者需要编写代码来创建这些对象,并将它们添加到Box2D的世界中。当篮球与篮筐或...

    coco2d-x API.rar

    对于物理模拟,cocos2d-x集成了Box2D物理引擎,通过Body、Fixture和Joint等类,可以轻松构建物理世界,实现碰撞检测和刚体动力学。 6. **音频和音乐**: AudioEngine模块提供了音频播放功能,支持背景音乐和音效...

    使用libgdx中box2d编写的一个简单游戏测试场景1

    而Box2D则是一个物理引擎库,专门用于模拟2D物理效果,如重力、碰撞检测等,使得游戏中的物体运动更加真实。在这个名为“my-gdx-box2d”的项目中,我们将深入探讨如何使用这两个工具构建一个简单的游戏测试场景。 ...

    一个打乒乓球的cocos2d-x游戏

    3. **物理引擎(Box2D)**:为了模拟球与板子、砖块之间的碰撞,cocos2d-x集成了Box2D物理引擎。我们需要设置物理世界,为物体添加刚体(Body),并定义它们的形状、质量、摩擦力等属性。碰撞事件可以通过监听接触...

    cocos2d-js离线API

    Cocos2d-js内置了Box2D物理引擎,可以实现复杂的物理模拟,如重力、碰撞检测等。通过创建Body、Fixture和Joint等物理实体,开发者可以构建出真实的物理世界。 五、粒子系统 Cocos2d-js的ParticleSystem类提供了一...

    cocos2d-x 魔方图片

    除此之外,cocos2d-x还支持物理引擎(如Box2D),可以用于创建更复杂的动态效果,如碰撞检测和物理行为模拟。如果"魔方图片"涉及到物理特性,那么开发者可能需要用到`b2World`、`b2Body`、`b2PolygonShape`等Box2D...

    FlappyBird-cocos2dx-master_TheMaster_cocos2d-x_

    cocos2d-x集成了Box2D物理引擎,通过定义刚体(Body)、形状(Shape)和关节(Joint),可以创建出逼真的物理世界。 触摸事件处理是游戏交互的关键,cocos2d-x提供了一个事件监听系统,开发者可以注册监听器来响应...

    cocos2d-x 3.0 离线文档

    5. **物理引擎**:cocos2d-x集成了Box2D物理引擎,可以创建物理世界,定义刚体(Body)、形状(Shape)和关节(Joint),实现物体碰撞检测和物理模拟。 6. **音频管理**:SoundEngine模块用于播放背景音乐和音效,...

    cocos2d-x 2.2 api

    4. **物理引擎**:Cocos2d-x 2.2集成了Box2D物理引擎,用于模拟真实世界的物理现象。`b2World`、`b2Body`、`b2Fixture`和`b2Joint`等类提供了碰撞检测、重力模拟等功能。 5. **事件处理**:Cocos2d-x提供了事件监听...

    ios泰然cocos2d弹球实例 box2d

    "ios泰然cocos2d弹球实例 box2d"是一个基于Cocos2D的游戏项目,它利用Box2D物理引擎来模拟弹球游戏的物理行为。Box2D是一个强大的2D物理模拟库,适用于各种游戏和模拟应用。 首先,Cocos2D提供了一个简单易用的API...

    Breakout box2d学习代码

    2. **Box2D物理引擎**:学习如何设置Box2D世界,创建Body、Fixture、Joint等物理对象,以及如何调整物理属性,如密度、摩擦力和弹性。 3. **游戏对象建模**:将游戏中的砖块、球和挡板等元素用Box2D的物理实体表示...

Global site tag (gtag.js) - Google Analytics