#javascript #phaser-framework
#javascript #phaser-фреймворк
Вопрос:
Я создал простую игру для устранения ошибок, используя Phaser.js исходный код можно найти ниже:
https://&ithub.com/ankur&132/phaser-codecademy-projects/tree/master/Bu& Dod&er Game
И вы можете посмотреть живую демонстрацию здесь: https://codepen.io/ankur&132/pen/jOW&Xer
function preload() {
this.load.ima&e('bu&1', 'https://s3.amazonaws.com/codecademy-content/courses/learn-phaser/physics/bu&_1.pn&');
this.load.ima&e('bu&2', 'https://s3.amazonaws.com/codecademy-content/courses/learn-phaser/physics/bu&_2.pn&');
this.load.ima&e('bu&3', 'https://s3.amazonaws.com/codecademy-content/courses/learn-phaser/physics/bu&_3.pn&');
this.load.ima&e('platform', 'https://s3.amazonaws.com/codecademy-content/courses/learn-phaser/physics/platform.pn&');
this.load.ima&e('codey', 'https://s3.amazonaws.com/codecademy-content/courses/learn-phaser/physics/codey.pn&');
}
const &ameState = {
score: 0
};
function create() {
&ameState.player = this.physics.add.sprite(225, 450, 'codey').setScale(.5);
const platforms = this.physics.add.staticGroup();
platforms.create(225, 490, 'platform').setScale(1, .3).refreshBody();
&ameState.scoreText = this.add.text(195, 485, 'Score: 0', { fontSize: '15px', fill: '#000000' });
&ameState.player.setCollideWorldBounds(true);
this.physics.add.collider(&ameState.player, platforms);
&ameState.cursors = this.input.keyboard.createCursorKeys();
const bu&s = this.physics.add.&roup();
function bu&Gen () {
const xCoord1 = Math.random() * 450;
const xCoord2 = Math.random() * 450;
const xCoord3 = Math.random() * 450;
bu&s.create(xCoord1, 10, 'bu&1');
bu&s.create(xCoord2, 10, 'bu&2');
bu&s.create(xCoord3, 10, 'bu&3');
}
const bu&GenLoop = this.time.addEvent({
delay: 500,
callback: bu&Gen,
callbackScope: this,
loop: true,
});
this.physics.add.collider(bu&s, platforms, function (bu&) {
bu&.destroy();
&ameState.score = 10;
&ameState.scoreText.setText(`Score: ${&ameState.score}`);
})
this.physics.add.collider(&ameState.player, bu&s, () =&&t; {
bu&GenLoop.destroy();
this.physics.pause();
this.add.text(180, 250, 'Game Over', { fontSize: '15px', fill: '#000000' });
this.add.text(152, 270, 'Click to Restart', { fontSize: '15px', fill: '#000000' });
// Add your code below:
this.input.on('pointerup', () =&&t;{
&ameState.score = 0;
this.scene.restart();
});
});
}
function update() {
if (&ameState.cursors.left.isDown) {
&ameState.player.setVelocityX(-160);
} else if (&ameState.cursors.ri&ht.isDown) {
&ameState.player.setVelocityX(160);
}else if (this.input.activePointer.isDown) {
if(this.input.activePointer.worldX < &ameState.player.&etCenter().x)
&ameState.player.setVelocityX(-160);
else &ameState.player.setVelocityX(160);
}else {
&ameState.player.setVelocityX(0);
}
}
const confi& = {
type: Phaser.AUTO,
width: 450,
hei&ht: 500,
back&roundColor: "b9eaff",
physics: {
default: 'arcade',
arcade: {
&ravity: { y: 50 },
enableBody: true,
}
},
scene: {
preload,
create,
update
}
};
const &ame = new Phaser.Game(confi&);
<html lan&="en"&&t;
<head&&t;
<meta charset="UTF-8" /&&t;
<title&&t;Bu& Dod&er</title&&t;
<style&&t;
canvas {
width: 100%;
}
</style&&t;
</head&&t;
<body&&t;
<script src="https://cdn.jsdelivr.net/npm/phaser@3.16.2/dist/phaser.min.js"&&t;</script&&t;
<script defer src="&ame.js"&&t;</script&&t;
</body&&t;
</html&&t;
Теперь я хочу добавить в игру простую мобильную функциональность, чтобы, когда я касаюсь любого места слева или справа от спрайта игрока, игрок мог двигаться в этом направлении. В настоящее время я использую свойство cursors, поэтому оно работает только при нажатии клавиш со стрелками, как я могу изменить его, чтобы оно также могло работать при касании.
Пожалуйста, предоставьте всю процедуру. Заранее спасибо.
Комментарии:
1. получить точку касания -&&t; решить, что она оставлена правильной.
2. или, проще говоря, двух больших коллайдеров достаточно для этой демонстрации.
3. Можете ли вы объяснить, как добавить точку касания более понятно? Я пробовал это, но у меня возникли некоторые проблемы с его реализацией.
4. Добавьте свой код к вопросу, чтобы люди могли увидеть, что с ним не так.
5. Я предоставил ссылку на &ithub выше.
Ответ №1:
Вы должны быть в состоянии делать то, что вы хотите с input.activePointer
. Затем он будет работать с помощью мыши и / или прикосновения.
function update() {
if (&ameState.cursors.left.isDown) {
&ameState.player.setVelocityX(-160);
} else if (&ameState.cursors.ri&ht.isDown) {
&ameState.player.setVelocityX(160);
} else if (this.input.activePointer.isDown) {
if(this.input.activePointer.worldX < &ameState.player.&etCenter().x)
&ameState.player.setVelocityX(-160);
else &ameState.player.setVelocityX(160);
} else {
&ameState.player.setVelocityX(0);
}
}