我正在编码平台游戏,我在平台和播放器之间发生碰撞,以便他可以通过平台,但是玩家不会通过平台
构建平台:
for (var i = 0; i < 35; i++) {
var type = i % 2 === 1 ? 'platform' : 'ice-platform';
var platform = this.platforms.create(x, y, type);
if (platform.key === 'ice-platform') {
platform.body.velocity.x = this.rnd.between(50, 100);
if (Math.random() > 0.5) {
platform.body.velocity.x *= -1;
}
}
wrapPlatform: function (platform) {
if (platform.key === 'ice-platform') {
if (platform.body.velocity.x < 0 && platform.x <= -160) {
platform.x = 640;
} else if (platform.body.velocity.x > 0 && platform.x >= 600) {
platform.x = -160;
}
}
},
与球员碰撞:
setFriction: function (player, platform) {
if (platform.key === 'ice-platform') {
player.body.x -= platform.body.x - platform.body.prev.x;
}
},
提示:使用game.add.sprite(...)
,因为如果使用...add.image...
,它将无法正常工作
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'game', { preload: preload, create: create, update: update });
var ground, player;
var cursors;
function preload() {
this.load.baseURL = 'https://raw.githubusercontent.com/nazimboudeffa/assets/master/';
this.load.crossOrigin = 'anonymous';
this.load.image('ground', 'pics/platform.png');
this.load.image('dude', 'sprites/phaser-dude.png');
}
function create() {
game.physics.startSystem(Phaser.Physics.ARCADE);
ground = game.add.sprite(0, 200, 'ground');
game.physics.arcade.enable(ground);
ground.body.enable = true;
ground.body.immovable = true;
player = game.add.sprite(0, 300, 'dude');
game.physics.arcade.enable(player);
player.body.gravity.y = 300;
player.body.collideWorldBounds = true;
cursors = game.input.keyboard.createCursorKeys();
}
function update(){
if (player.y < ground.y){
game.physics.arcade.collide(player, ground)
}
if(cursors.up.isDown){
player.body.velocity.y = -240;
}
}
<script src="https://cdn.jsdelivr.net/npm/phaser-ce@2.13.1/build/phaser.js"></script>