javascript - Phaser 2.6.2 为什么物体在改变 X 和 Y 位置时不会互相阻挡?
问题描述
问题很简单 - 对象在尝试崩溃时不会相互阻挡。无论我做什么,这些对象都会互相忽略并互相穿过。我还注意到,如果你通过速度改变 X 和 Y 的位置,那么物体就会开始互相阻挡。但这不适合我,因为速度逐渐增加,我需要坦克以线速度移动。而且您还需要避免在碰撞中反弹。也就是说,我需要坦克在它们坠毁时停止移动。
我发布了一个工作示例点击这里
const game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser', { preload: preload, create: create, update: update, render: render });
let player;
let cursors;
let fireButton;
let weapon;
let weapon2;
let controls;
let enemy;
function preload() {
game.load.crossOrigin = "Anonymous";
game.load.image('player', 'https://steemitimages.com/640x0/https://res.cloudinary.com/hpiynhbhq/image/upload/v1516330590/dln77v8bxlbzkrevng0x.png');
game.load.image('bullet', 'https://examples.phaser.io/assets/sprites/bullet.png');
}
function create() {
game.physics.startSystem(Phaser.Physics.ARCADE);
game.world.setBounds(0, 0, 800, 600);
player = game.add.sprite(500, 300, 'player');
player.scale.setTo(.1, .1);
player.anchor.setTo(0.5, 0.5);
player.angle = 270;
player.enableBody = true;
cursors = game.input.keyboard.createCursorKeys();
fireButton = game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
weapon = game.add.weapon(1, 'bullet');
weapon.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS;
weapon.bulletAngleOffset = 90;
weapon.bulletSpeed = 400;
weapon.trackSprite(player, 0, 0, false);
weapon.fireAngle = player.angle + 90;
enemy = game.add.sprite(100, 100, 'player');
enemy.scale.setTo(.1, .1);
enemy.anchor.setTo(0.5, 0.5);
enemy.angle = 270;
enemy.enableBody = true;
weapon2 = game.add.weapon(1, 'bullet');
weapon2.bulletKillType = Phaser.Weapon.KILL_WORLD_BOUNDS;
weapon2.bulletAngleOffset = 90;
weapon2.bulletSpeed = 1400;
weapon2.trackSprite(enemy, 0, 0, false);
weapon2.fireAngle = enemy.angle + 90;
controls = {
right : this.input.keyboard.addKey(Phaser.Keyboard.D),
left : this.input.keyboard.addKey(Phaser.Keyboard.A),
up : this.input.keyboard.addKey(Phaser.Keyboard.W),
down : this.input.keyboard.addKey(Phaser.Keyboard.S),
fire : this.input.keyboard.addKey(Phaser.Keyboard.Q),
};
game.physics.arcade.enable(player);
game.physics.arcade.enable(enemy);
player.body.immovable = true;
enemy.body.immovable = true;
}
function killThem(enemy, bullet) {
console.dir(weapon);
enemy.kill();
bullet.kill();
}
function update() {
game.physics.arcade.collide(weapon.bullets, enemy, killThem);
game.physics.arcade.collide(weapon2.bullets, player, killThem);
if (cursors.up.isDown) {
player.y -= 4;
player.angle = 180;
weapon.fireAngle = 270;
} else if (cursors.down.isDown) {
player.y += 4;
player.angle = 0;
weapon.fireAngle = 90;
} else if (cursors.left.isDown) {
player.x -= 4;
player.angle = 90;
weapon.fireAngle = 180;
} else if (cursors.right.isDown) {
player.x += 4;
player.angle = 270;
weapon.fireAngle = 360;
}
if (fireButton.isDown) {
weapon.fire()
}
if (controls.up.isDown) {
enemy.y -= 4;
enemy.angle = 180;
weapon2.fireAngle = 270;
} else if (controls.down.isDown) {
enemy.y += 4;
enemy.angle = 0;
weapon2.fireAngle = 90;
} else if (controls.left.isDown) {
enemy.x -= 4;
enemy.angle = 90;
weapon2.fireAngle = 180;
} else if (controls.right.isDown) {
enemy.x += 4;
enemy.angle = 270;
weapon2.fireAngle = 360;
}
if (controls.fire.isDown) {
weapon2.fire()
}
}
function render() {
weapon.debug()
}
解决方案
推荐阅读
- excel - 将 txt 文件导入 Google Sheet 的脚本(基于现有的 VBA)
- reactjs - Reactmapgl 和视口从另一个组件更改
- python - 管理面板上的 Django TimeField 小部件更改
- java - Abbyy FREngine 12 Web API 获取许可证详细信息
- json - 如何从flutter中的嵌套地图api获取数据
- r - 如何在forloop中运行不同的函数
- docker - docker容器不会在机器重启时重启
- html - Mapbox全屏按钮未在iframe中显示
- flutter - 我在解析 json 时在 null 上调用了“cast”方法
- xcode - 反应本机构建失败 - xcodebuild:错误:名为“foo”的工作区不包含名为“foo”的方案