4

大多数示例使用精灵来添加物理,但我想将物理添加到使用 Graphics 类创建的对象中。例如:

var square = game.add.graphics( 0, 0 );
//some definitions

game.physics.arcade.enable( square );

这根本不适用于图形,但它立即适用于精灵。为什么会这样,我怎样才能做到这一点?

提前致谢。

4

2 回答 2

8

我不得不进行大量调查,因为这似乎不是标准(至少在教程方面),但您必须创建一个 BitmapData 对象并使用画布来绘制图形。这不像使用 game.add.graphics 来创建圆圈和 poligons 等那样有趣,但它运作良好。

这是您创建平台的方式:

//creates the BitmapData object, you can use it to create figures:
var floor = game.add.bitmapData( 400, 20 ); //width, height

//this fills the whole object with a color:
floor.fill( 200, 100, 0, 1 ); //Red, Green, Blue, Alpha
//floor will have a canvas context object to draw figures. 
//Here are some more examples:
//http://www.html5canvastutorials.com/tutorials/html5-canvas-circles/

//after you finish drawing, you need to convert the object to a sprite:
var floorSprite = game.add.sprite( 100, 500, floor );

//this adds physics to the object and adds a .body property:
game.physics.arcade.enable( floorSprite );

//stops the object in place and prevents other objects from displacing it:
floorSprite.body.allowGravity   = false;
floorSprite.body.immovable      = true;

这就是您无需依赖图像文件即可创建平台的方式。我看过一些使用文件而不是生成平台的教程,我认为这是一种浪费。

另外,我认为您需要将矢量转换为位图是因为矢量物理在硬件上非常繁重(或者看起来如此)。

希望这可以帮助更多的人!

于 2014-05-04T17:36:52.287 回答
0

也许它适用于此:

anySprite.addChild(yourGraphicsObject);

在那之后:

game.physics.arcade.enable(anySprite);

于 2015-07-09T13:27:40.530 回答