admin管理员组文章数量:1391918
i´m starting with phaser arcade physics. the assigned categories won´t work - i have to add a collider manually. the bricks should also collide with each other:
for (let i = 0; i < 3; i++) {
const brick = this.physics.add
.sprite(300 + 100 * i, 300 + 100 * i, '')
.setSize(150, 30 * (i + 1))
.setMass(1)
.setFriction(0)
.setMaxVelocity(0, MaxVelocityY)
.setCollideWorldBounds(true)
.setCollisionCategory(CollisionCategory.BRICK)
.setCollidesWith([CollisionCategory.PLAYER, CollisionCategory.BRICK]); // not working
//add collider manually
this.physics.add.collider(this.player, brick);
}
categories:
enum CollisionCategory {
PLAYER = 1 << 1,
BRICK = 1 << 2,
}
Are there some additional options needed?
i´m starting with phaser arcade physics. the assigned categories won´t work - i have to add a collider manually. the bricks should also collide with each other:
for (let i = 0; i < 3; i++) {
const brick = this.physics.add
.sprite(300 + 100 * i, 300 + 100 * i, '')
.setSize(150, 30 * (i + 1))
.setMass(1)
.setFriction(0)
.setMaxVelocity(0, MaxVelocityY)
.setCollideWorldBounds(true)
.setCollisionCategory(CollisionCategory.BRICK)
.setCollidesWith([CollisionCategory.PLAYER, CollisionCategory.BRICK]); // not working
//add collider manually
this.physics.add.collider(this.player, brick);
}
categories:
enum CollisionCategory {
PLAYER = 1 << 1,
BRICK = 1 << 2,
}
Are there some additional options needed?
Share Improve this question asked Mar 15 at 23:54 NeoGER89NeoGER89 4984 silver badges18 bronze badges 2- 1 Did my answer solve/answer your question, or did I miss something? If it help/solved your question, please consider accepting and/or upvoting my answer. To mark the question as solved. – winner_joiner Commented Mar 19 at 8:43
- 1 Worked thanks. I found out, that i also can add a collider with given group(s). That way i can add a brick to the brick group and check collision against the player. Even after the collider with the brick group was created. Very cool. – NeoGER89 Commented Mar 22 at 0:05
1 Answer
Reset to default 1I say it works as designed, and everything is correct, but there are some thing to note here:
- for the categories you should use
this.physics.nextCategory();
link to the documentation - the
setCollisionCategory
andsetCollidesWith
just tells the physics engine the check the collision between hte object marked in the specific categories, you still have to invokethis.physics.add.collider
or some other function.
Short Demo:
(ShowCasing how the engine now just check agains categories)
class DemoScene extends Phaser.Scene {
create() {
this.add.text(10, 10, "White and red collide, green doesn't.\nBlue collides only with white").setOrigin(0);
let box1 = this.add.rectangle(10, 45, 20, 20, 0xffffff).setOrigin(0);
let box2 = this.add.rectangle(200, 45, 20, 20, 0xff0000).setOrigin(0);
let box3 = this.add.rectangle(300, 45, 20, 20, 0x00ff00).setOrigin(0);
let box4 = this.add.rectangle(350, 45, 20, 20, 0x0000ff).setOrigin(0);
let cat1 = this.physics.nextCategory();
let cat2 = this.physics.nextCategory();
let cat3 = this.physics.nextCategory();
this.physics.add.existing(box1).body.setCollisionCategory(cat1).setCollidesWith([cat1, cat2]);
this.physics.add.existing(box2).body.setCollisionCategory(cat2).setCollidesWith([cat1, cat2]);
this.physics.add.existing(box3).body.setCollisionCategory(cat3).setCollidesWith([cat3]);
this.physics.add.existing(box4).body.setCollisionCategory(cat1).setCollidesWith([cat1]);
box1.body.setVelocity(30, 0);
box2.body.setVelocity(-30, 0);
box3.body.setVelocity(-30, 0);
box4.body.setVelocity(-30, 0);
// letting all object collide
this.physics.add.collider([box1, box2, box3, box4], [box1, box2, box3, box4]);
}
}
var config = {
width: 540,
height: 180,
physics: {
default: 'arcade',
arcade: { debug: true },
},
scene: DemoScene,
};
new Phaser.Game(config);
console.clear();
document.body.style = 'margin:0;';
<script src="//cdn.jsdelivr/npm/phaser/dist/phaser.min.js"></script>
I never needed (really used) this features, since I think it is only good to differentiate nuances in collision, that level of detail I never needed. The main benefit I see is, if you want to change dynamically which objects collide with each other, then this feature would be helpful since you would only have to change the category (and maybe for performance, but this I'm just assuming).
本文标签: Phaser Arcade Physics Collision Categories SetupStack Overflow
版权声明:本文标题:Phaser Arcade Physics Collision Categories Setup - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744600998a2615063.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论