Phaser 3 - 物质物理 - 意外 "Jumping Bean" 行为
Phaser 3 - Matter Physics - Unexpected "Jumping Bean" Behaviour
我正在使用 Phaser 3
和 MatterJS
物理引擎构建一个基本的物理游戏。
(我把游戏的例子放在这里进行测试:game demo)
一切都进行得很顺利,但是当 dynamic body
(球)试图停在平面上时,我目前看到一些奇怪的行为 static body
(地面)。球并没有失去所有动量/速度并变得静止,而是四处跳跃,就好像它正在与移动物体碰撞一样(球的轨迹如提供的屏幕截图所示)。
随着球不断以随机方向和随机高度跳跃,这种情况永远持续下去。
我不确定是什么导致了这种永无止境的 球 运动,但这是物理体的代码:
任何想法都会很棒!
注意:我现在正在使用 Phaser.GameObjects.Container
,因为我需要将其他游戏对象添加到此容器中。
球类游戏对象:
export class HoleBall extends Phaser.GameObjects.Container {
private ball: Phaser.Physics.Matter.Sprite;
constructor(
public scene: Phaser.Scene,
public x: number,
public y: number,
private ballStartPosition: IPosition
) {
super(scene, x, y);
this.createPhysicsObjects();
}
private createPhysicsObjects(): void {
const shapes = this.scene.cache.json.get(
ECourseItems.COMMON_PHYSICS_SHAPES
);
this.ball = this.scene.matter.add
.sprite(
this.ballStartPosition.x,
this.ballStartPosition.y,
ECourseItems.COMMON_SPRITE_SHEET,
ECourseItems.BALL,
{
shape: shapes.ball,
label: ECourseItems.BALL,
} as TMatterBody
)
.setSleepThreshold(settings.ball.sleepThreshold);
this.ball.setDepth(2);
}
public getBall(): Phaser.Physics.Matter.Sprite {
return this.ball;
}
}
地面游戏对象:
export class HoleGround extends Phaser.GameObjects.Container {
private ground: Phaser.Physics.Matter.Image;
constructor(
public scene: Phaser.Scene,
public x: number,
public y: number,
private holePhysicsShapeKey: ECourseItems,
private holeSpriteSheetKey: ECourseItems
) {
super(scene, x, y);
this.createPhysicsObjects();
}
private createPhysicsObjects(): void {
const shapes = this.scene.cache.json.get(this.holePhysicsShapeKey);
this.ground = this.scene.matter.add.image(
0,
0,
this.holeSpriteSheetKey,
ECourseItems.GROUND,
{
shape: shapes.ground,
label: ECourseItems.GROUND,
} as TMatterBody
);
this.ground.setStatic(true);
this.scene.matter.alignBody(
this.ground,
this.scene.sys.game.canvas.width,
this.scene.sys.game.canvas.height,
Phaser.Display.Align.BOTTOM_CENTER
);
}
public getGround(): Phaser.Physics.Matter.Image {
return this.ground;
}
}
在查看为 ground 游戏 object 生成的 JSON 之后(由 PhysicsEditor 应用程序生成)- 它似乎正在生成多层物理体(不知道为什么,可能是应用程序的错误)。但是在手动删除额外的层之后,奇怪的 'jumping' 行为不再发生。
我正在使用 Phaser 3
和 MatterJS
物理引擎构建一个基本的物理游戏。
(我把游戏的例子放在这里进行测试:game demo)
一切都进行得很顺利,但是当 dynamic body
(球)试图停在平面上时,我目前看到一些奇怪的行为 static body
(地面)。球并没有失去所有动量/速度并变得静止,而是四处跳跃,就好像它正在与移动物体碰撞一样(球的轨迹如提供的屏幕截图所示)。
随着球不断以随机方向和随机高度跳跃,这种情况永远持续下去。
我不确定是什么导致了这种永无止境的 球 运动,但这是物理体的代码:
任何想法都会很棒!
注意:我现在正在使用 Phaser.GameObjects.Container
,因为我需要将其他游戏对象添加到此容器中。
球类游戏对象:
export class HoleBall extends Phaser.GameObjects.Container {
private ball: Phaser.Physics.Matter.Sprite;
constructor(
public scene: Phaser.Scene,
public x: number,
public y: number,
private ballStartPosition: IPosition
) {
super(scene, x, y);
this.createPhysicsObjects();
}
private createPhysicsObjects(): void {
const shapes = this.scene.cache.json.get(
ECourseItems.COMMON_PHYSICS_SHAPES
);
this.ball = this.scene.matter.add
.sprite(
this.ballStartPosition.x,
this.ballStartPosition.y,
ECourseItems.COMMON_SPRITE_SHEET,
ECourseItems.BALL,
{
shape: shapes.ball,
label: ECourseItems.BALL,
} as TMatterBody
)
.setSleepThreshold(settings.ball.sleepThreshold);
this.ball.setDepth(2);
}
public getBall(): Phaser.Physics.Matter.Sprite {
return this.ball;
}
}
地面游戏对象:
export class HoleGround extends Phaser.GameObjects.Container {
private ground: Phaser.Physics.Matter.Image;
constructor(
public scene: Phaser.Scene,
public x: number,
public y: number,
private holePhysicsShapeKey: ECourseItems,
private holeSpriteSheetKey: ECourseItems
) {
super(scene, x, y);
this.createPhysicsObjects();
}
private createPhysicsObjects(): void {
const shapes = this.scene.cache.json.get(this.holePhysicsShapeKey);
this.ground = this.scene.matter.add.image(
0,
0,
this.holeSpriteSheetKey,
ECourseItems.GROUND,
{
shape: shapes.ground,
label: ECourseItems.GROUND,
} as TMatterBody
);
this.ground.setStatic(true);
this.scene.matter.alignBody(
this.ground,
this.scene.sys.game.canvas.width,
this.scene.sys.game.canvas.height,
Phaser.Display.Align.BOTTOM_CENTER
);
}
public getGround(): Phaser.Physics.Matter.Image {
return this.ground;
}
}
在查看为 ground 游戏 object 生成的 JSON 之后(由 PhysicsEditor 应用程序生成)- 它似乎正在生成多层物理体(不知道为什么,可能是应用程序的错误)。但是在手动删除额外的层之后,奇怪的 'jumping' 行为不再发生。