PhaserJS: добавьте физику графическим объектам

В большинстве примеров для добавления физики используются спрайты, но я хочу добавить физику к объектам, созданным с помощью класса Graphics. Например:

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

game.physics.arcade.enable( square );

С графикой это вообще не работает, а со спрайтами работает сразу. Почему это так и как я могу этого добиться?

Заранее спасибо.


person René Olivo    schedule 04.05.2014    source источник


Ответы (2)


Мне пришлось немного изучить, так как кажется, что это не стандарт (по крайней мере, с точки зрения учебника), но вам нужно создать объект BitmapData и использовать холст для рисования фигур. Это не так весело, как использование game.add.graphics для создания кругов, многоугольников и т. д., но работает хорошо.

Вот как вы создаете платформу:

//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;

Вот как вы можете создать платформу, не полагаясь на файлы изображений. Я видел несколько руководств, использующих файлы вместо создания платформы, и я думаю, что это пустая трата времени.

Кроме того, я думаю, вам нужно преобразовать ваш вектор в растровое изображение, потому что векторная физика довольно тяжела для оборудования (или так кажется).

Надеюсь, это поможет еще нескольким людям!

person René Olivo    schedule 04.05.2014
comment
Это было очень полезно, большое спасибо! Я искал это везде и я рад, что наконец нашел это. Однако кажется глупым, что вы не можете просто добавить физику к графике прямо из коробки. Я надеюсь, что с тех пор, как это было написано, в Phaser были внесены улучшения (и теперь это версия 2.6). Если кто-то в курсе, то дайте мне знать. - person Brady Dowling; 14.02.2017
comment
@BradyDowling Я не разработчик игр, поэтому, обнаружив эту проблему с PhaserJS, я отказался от нее. Если бы мне пришлось использовать холст, чтобы добавить физику в мою игру, мне лучше было бы изучить Canvas, а не Phaser. - person René Olivo; 16.02.2017

возможно, это работает с этим:

anySprite.addChild (вашGraphicsObject);

и после этого:

game.physics.arcade.enable(любой спрайт);

person Snow    schedule 09.07.2015
comment
Согласно этой теме, ваше предложение является правильным способом Это. Интересно, этот метод по-прежнему является предпочтительным для Phaser 2.6.2? Любые дальнейшие мысли будут полезны. - person Brady Dowling; 14.02.2017