我正在使用 Phaser 开发一个小型 JavaScript 游戏,并且我有一个在某些点改变其大小的精灵。它使用该sprite.body.setSize
方法执行此操作。然而,看起来精灵在改变大小时停止与它应该碰撞的对象发生碰撞。我理解它为什么这样做,因为精灵的边界在大小变化期间处于不断变化的状态,但我担心我的用户可以利用这个问题并穿过墙壁。我不确定如何让精灵在改变大小的过程中响应碰撞。有没有办法防止这种情况?
应 Supamiu 的要求进行编辑:
这是我在游戏中尝试做的一个简单示例。此外,这里是该示例的源代码。
// Global constants
var GAME_WIDTH = 800;
var GAME_HEIGHT = 600;
var TEXT_X_POS = 150;
var TEXT_Y_POS = 50;
var PHASER_DUDE_WIDTH = 27;
var PHASER_DUDE_HEIGHT = 40;
var MASTER_WIDTH = 57;
var MASTER_HEIGHT = 77;
var SPRITE_X_POS = 200;
var SPRITE_Y_POS = 400;
var SPRITE_GRAVITY = 300;
var LEFT_VELOCITY = -300;
var RIGHT_VELOCITY = 300;
var JUMP_VELOCITY = -300;
var STOPPED = 0;
var WALL_X_POS = 500;
var WALL_Y_POS = 300;
// Global variables
var sprite;
var wall;
var cursors;
var game = new Phaser.Game(GAME_WIDTH, GAME_HEIGHT, Phaser.AUTO, "game", {preload: preload, create: create, update: update});
function preload () {
game.load.image("master", "sprites/master.png");
game.load.image("phaser dude", "sprites/phaser_dude.png");
game.load.image("wall", "sprites/wall.png");
}
function create () {
game.add.text(TEXT_X_POS, TEXT_Y_POS, "Use the cursor keys to jump and move", {fontSize: "16px", fill: "white"});
sprite = game.add.sprite(SPRITE_X_POS, SPRITE_Y_POS, "master");
game.physics.arcade.enable(sprite);
sprite.body.collideWorldBounds = true;
sprite.body.gravity.y = SPRITE_GRAVITY;
wall = game.add.sprite(WALL_X_POS, WALL_Y_POS, "wall");
game.physics.arcade.enable(wall);
wall.body.immovable = true;
cursors = game.input.keyboard.createCursorKeys();
}
function update () {
game.physics.arcade.collide(sprite, wall);
sprite.body.velocity.x = STOPPED;
cursors.up.onDown.add(jump);
if (cursors.left.isDown) {
sprite.body.velocity.x = LEFT_VELOCITY
}
if (cursors.right.isDown) {
sprite.body.velocity.x = RIGHT_VELOCITY;
}
if (sprite.isJumping && sprite.body.onFloor()) {
sprite.isJumping = false;
sprite.loadTexture("master");
sprite.body.setSize(MASTER_WIDTH, MASTER_HEIGHT);
}
}
function jump () {
sprite.isJumping = true;
sprite.body.velocity.y = JUMP_VELOCITY;
sprite.loadTexture("phaser dude");
sprite.body.setSize(PHASER_DUDE_WIDTH, PHASER_DUDE_HEIGHT);
}
你可以看到,如果你在精灵改变大小(和纹理)时推动墙的左侧,它可以穿过墙。