Actionscript 3 在flash AS3中将精灵添加到box2d对象
我对flash和box2d很陌生。我已经设法不费吹灰之力地了解了box2d的基本知识,但到目前为止,我一直在使用b2debugdraw函数来显示我创建的所有对象。所以我决定开始研究如何将精灵或图像添加到我的对象中 我已经绝望地在谷歌上搜索了几个小时,现在我完全沮丧了,所以如果你们中的一个人能帮我解决这个问题,我真的很感激,我所要做的就是把我制作的一个板条箱的图像/精灵添加到我用box2d制作的一个正方形上 以下是我最近的一次尝试:Actionscript 3 在flash AS3中将精灵添加到box2d对象,actionscript-3,flash,box2d,flashdevelop,Actionscript 3,Flash,Box2d,Flashdevelop,我对flash和box2d很陌生。我已经设法不费吹灰之力地了解了box2d的基本知识,但到目前为止,我一直在使用b2debugdraw函数来显示我创建的所有对象。所以我决定开始研究如何将精灵或图像添加到我的对象中 我已经绝望地在谷歌上搜索了几个小时,现在我完全沮丧了,所以如果你们中的一个人能帮我解决这个问题,我真的很感激,我所要做的就是把我制作的一个板条箱的图像/精灵添加到我用box2d制作的一个正方形上 以下是我最近的一次尝试: package { import Box2D.Collisio
package
{
import Box2D.Collision.b2AABB;
import Box2D.Collision.Shapes.b2PolygonShape;
import Box2D.Common.Math.b2Vec2;
import Box2D.Dynamics.b2Body;
import Box2D.Dynamics.b2BodyDef;
import Box2D.Dynamics.b2DebugDraw;
import Box2D.Dynamics.b2Fixture;
import Box2D.Dynamics.b2FixtureDef;
import Box2D.Dynamics.b2World;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author Robert Damery
*/
public class Main extends Sprite
{
//World object
public var world:b2World;
//Scale number
public const scale:int = 30;
//Time Counter
public var Counter:int = 60;
public var boxbody:Sprite;
public function Main():void
{
var asprite:Sprite;
asprite.graphics.beginBitmapFill(crate.jpg, null, false, false);
asprite.graphics.drawRect(0, 0, 25, 25);
asprite.graphics.endFill();
asprite.x = 100;
asprite.y = 100;
stage.addChild(asprite);
// create world
CreateWorld();
//Create a box function
CreateBox(300, 600, 600, 25, false, .8);
CreateBox(0, 600, 25, 600, false, .8);
CreateBox(800, 0, 25, 600, false, .8);
CreateBox(400, 100, 25, 25, true, .8);
//Make frames pass in flash
addEventListener(Event.ENTER_FRAME, newframeevent);
//Draw our debug data
debug_draw();
}
//Event handler function, makes time go by
private function newframeevent(e:Event):void
{
world.Step(1 / 30, 10, 10);
world.ClearForces();
world.DrawDebugData();
}
private function CreateWorld():void
{
//Size of World
var worldsize:b2AABB = new b2AABB();
worldsize.lowerBound.Set(-500, -500);
worldsize.upperBound.Set(500 , 500);
//Define Gravity
var gravity:b2Vec2 = new b2Vec2(0 , 9.8);
// Ignore sleeping objects
var doSleep:Boolean = true;
world = new b2World(gravity, doSleep);
}
private function CreateBox(x:Number, y:Number, width:Number, height:Number, is_Dynamic:Boolean, density:Number):b2Body
{
x = con2D(x);
y = con2D(y);
width = con2D(width);
height = con2D(height);
//Create the body definition
var floorshapedef:b2BodyDef = new b2BodyDef();
floorshapedef.position.Set(x, y);
//Determine whether object is dynamic or not
if (is_Dynamic == true)
{
floorshapedef.type = b2Body.b2_dynamicBody;
}
else
{
floorshapedef.type = b2Body.b2_staticBody;
}
//Create the shape
var floorshape:b2PolygonShape = new b2PolygonShape();
floorshape.SetAsBox(width, height);
//Create the fixture
var floorfixture = new b2FixtureDef();
floorfixture.shape = floorshape;
floorfixture.density = density;
floorfixture.restitution = .5;
floorfixture.friction = .25;
//Create body
var floorbody:b2Body = world.CreateBody(floorshapedef);
floorbody.CreateFixture(floorfixture);
return floorbody;
}
//Debug Draw function
public function debug_draw():void
{
var debug_draw:b2DebugDraw = new b2DebugDraw();
var debug_sprite:Sprite = new Sprite();
addChild(debug_sprite);
debug_draw.SetSprite(debug_sprite);
debug_draw.SetDrawScale(scale);
debug_draw.SetFlags(b2DebugDraw.e_shapeBit);
world.SetDebugDraw(debug_draw);
}
public function con2D(num:Number):Number
{
return num / scale;
}
}
}
我已经知道我甚至没有尝试将精灵连接到盒子上,但那是因为我甚至无法让盒子显示出来。当我运行这个特定的代码时,我得到一个错误:访问未定义的属性板条箱
我有不同格式的相同图像,包括.fla,但我总是遇到相同的错误。这里是一长串的box2d教程。至于将精灵添加到Box2d,您的想法是错误的。Box2d是一个模拟实时物理的物理引擎。使用DebugDraw将为您的形状提供基本图形 渲染和物理模拟是两个相互独立的线程 您需要做的是让图形模拟形状所在的位置。因此,在单帧事件中,您应该让精灵从您的box2d形状中获取位置、旋转和缩放。另外,不要忘记box2d是公制,flash是像素,请使用转换常数。下面的链接中解释了所有内容,请花时间阅读
希望这有帮助:这句话非常错误:
asprite.graphics.beginBitmapFill(crate.jpg, null, false, false);
crate.jpg?这应该是一个bitmapdata实例,但我认为crate.jpg不是一个有效的实例名
<>你已经接受了另一个答案,即使是最好的,也不回答你的问题:不确定的财产箱的访问。我已经看过那些教程了,它们实际上是在Flash中,而不是C++,但是问题是它们已经过时了。他使用的许多类和函数不再适用于新版box2d:/我认为我的问题更多的是理解东西的flash方面,我一直在看一些如何导入图像的flash示例,我尝试了这里看到的loader类和其他一些示例,但我仍然无法理解!您当前的开发设置是什么?您是否在Flash的IDE中进行编码?我在本教程之后成功导入了它,然后我继续阅读了您建议让图像跟随box2d对象的教程,谢谢您的帮助!:您还可以嵌入SWC,这些SWC被swf格式化为图形库。您进入Flash的IDE,然后制作一个movieclip,在properties中为actionscript导出它,在发布设置中检查导出为SWC并编译它。您应该有一个.SWC文件,然后可以导入FDT/FlashBuilder。因此,如果您为actionscript导出了一个movieclip,那么您可以创建一个新的图形,如果这种性质是,var mc:movieclip=new MYExportedMovieClip;