[英]Phaser 3 physics group with circle
我是 Phaser 的新手,正在学习本教程: https://www.codecaptain.io/blog/game-development/shooting-bullets-phaser-3-using-arcade-physics-groups/696
除了,而不是Laser
是Sprite
,我只是希望它是一个简单的圆圈,所以我尝试了以下;
export class Laser extends Phaser.Physics.Arcade.Body {
constructor(scene: Phaser.Scene, x: number, y: number) {
const c = new Phaser.GameObjects.Ellipse(scene, x, y, 25, 25, 0x00ff00);
super(scene.physics.world, c);
}
}
这只会引发以下错误Uncaught TypeError: child.addToDisplayList is not a function
。
我在这里错过了一些相当基本的东西吗? 我似乎只能使用Phaser.Physics.Arcade.Sprite
或Phaser.Physics.Arcade.Image
。 难道不可能只有一个由多个矩形或圆形组成的物理 object 吗?
您的代码看起来不错,但您仍然需要将GameObject
添加到scene
和物理世界,才能使其正常工作。
你只需要做一些小的调整就可以工作。
(更新代码)这里有一个简短的可执行演示来展示这个案例:
document.body.style = 'margin:0;'; class Laser extends Phaser.Physics.Arcade.Body { constructor(scene, x, y) { // add object to the scene, so that it can be displayed const c = scene.add.ellipse( x, y, 25, 25, 0x00ff00); // create the actual body super(scene.physics.world, c); // add Body to world scene.physics.add.existing(c) } } class Laser2 extends Phaser.GameObjects.Ellipse { constructor(scene, x, y) { super(scene, x, y, 25, 25, 0xff0000); //give the GameObject a Physics body scene.physics.add.existing(this) } } var config = { type: Phaser.AUTO, width: 536, height: 183, physics: { default: 'arcade', arcade: { gravity:{ y: 100 }, debug: true } }, scene: { create }, banner: false }; function create () { this.add.text(10,10, 'Falling balls- red are from a Group').setScale(1.5).setOrigin(0).setStyle({fontStyle: 'bold', fontFamily: 'Arial'}); // create a laser let laser = new Laser(this, 50, 50) // create second laser let group = this.physics.add.group({ classType: Laser2}); group.create(150, 0) group.create(170, -100) group.create(180, -50) } new Phaser.Game(config);
<script src="//cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.