Javascript 如何在Phaser 3中移动相同距离的一组对象?
我在Phaser有场比赛。当一支箭在游戏中发射时,它会被推到一个阵列上。箭射中目标,目标在下一支箭发射前向后移动。如果这没有意义,那么已经固定在目标上的箭头需要在目标移动时与目标一起移动 我尝试了移动数组的x值,并尝试在数组中循环。我也尝试过移动Javascript 如何在Phaser 3中移动相同距离的一组对象?,javascript,arrays,game-physics,phaser-framework,Javascript,Arrays,Game Physics,Phaser Framework,我在Phaser有场比赛。当一支箭在游戏中发射时,它会被推到一个阵列上。箭射中目标,目标在下一支箭发射前向后移动。如果这没有意义,那么已经固定在目标上的箭头需要在目标移动时与目标一起移动 我尝试了移动数组的x值,并尝试在数组中循环。我也尝试过移动this.arrows变量 代码 函数更新() { //声明用于移动的常量 常数=1500; this.player.setDrag(2000); //球员的轮换 if(this.cursors.up.isDown&&this.player.ang
this.arrows
变量
代码
函数更新()
{
//声明用于移动的常量
常数=1500;
this.player.setDrag(2000);
//球员的轮换
if(this.cursors.up.isDown&&this.player.angle>-45){
this.player.angle-=angleModifier;}
if(this.cursors.down.isDown&&this.player.angle<0){
this.player.angle+=angleModifier;}
//用空格键射击
if(移相器.输入.键盘.JustDown(这个.空格键)){
//拍摄动画
这个.player.anims.play('shoot',true);
//射箭
设arrow=this.physics.add.sprite(this.player.x,(this.player.y+20),'arrow');
//确保箭头有一个点击框
arrow.enableBody=true;
//让箭头移动
arrow.body.immoved=false;
//编辑箭头点击框
箭头。设置大小(50,15)。设置偏移(5,50);
arrow.setGravityY(3600);//重力会影响箭头
//箭速
arrow.setVelocityX(arrowMoveAmt);
arrow.setVelocityY((this.player.angle*50));
this.arrows.push(arrow);//将arrow添加到先前创建的数组中
this.arrowSound.play();//播放声音
//重置角度修改器以增加难度
angleModifier=(Math.random()+.1)*2;
}
else if(target.body.toucting.left){
//循环变量
设i=0;
//确定新奖牌的初始位置
设firstMedalX=180;
//循环以创建多个箭头
而(i
我找到了一个解决方案:
- 首先,从
循环中删除以下代码块
- 第二步,在
循环中,在
中添加这一行
- 第三个,在
循环的结束括号之后,添加以下代码:
update()
方法的完整代码片段:
function update ()
{
//Declare constants for movement
const arrowMoveAmt = 1500;
this.player.setDrag(2000);
//Rotation of the player
if (this.cursors.up.isDown && this.player.angle > -45) {
this.player.angle -= angleModifier;}
if (this.cursors.down.isDown && this.player.angle < 0) {
this.player.angle += angleModifier;}
//Shooting with the spacebar
if (Phaser.Input.Keyboard.JustDown(this.spacebar)) {
//Animate the shooting
this.player.anims.play('shoot', true);
//Arrow shooting
let arrow = this.physics.add.sprite(this.player.x, (this.player.y + 20), 'arrow');
//Make sure the arrow has a hitbox
arrow.enableBody = true;
//Let the arrow move
arrow.body.immovable = false;
//Edit arrow hitbox
arrow.setSize(50, 15).setOffset(5, 50);
arrow.setGravityY(3600); //Gravity will affect the arrows
//Arrow speeds
arrow.setVelocityX(arrowMoveAmt);
arrow.setVelocityY((this.player.angle * 50));
this.arrows.push(arrow); //Add arrow to the array created earlier
this.arrowSound.play(); //Play the sound
//Reset the angle modifier for added difficulty
angleModifier = (Math.random() + .1) * 2;
}
else if(target.body.touching.left) {
//Variable for loop
let i = 0;
//Set initial position of new medals
let firstMedalX = 180;
//Loop to create multiple arrows
while (i < this.arrows.length) {
newArrows = this.arrows[i];
newArrows.setGravityY(0);
newArrows.setVelocityX(0);
newArrows.setVelocityY(0);
//Add 30 to the new medal's x position
firstMedalX += 40;
//Increment for every arrow shot
i++;
//Reset the player angle for difficulty
this.player.angle = 0;
// Move the arrows
newArrows.x += 10
}
//Move the target
target.x += 10;
//Call the function to determine medal and pass the variable
if(this.arrows.length <= 5) {
//Only track the first five arrows
getMedal(firstMedalX);
}
}
//Function to decide medal, and where it goes
getMedal = (value) => {
//Gold medal
if (410 < newArrows.y && newArrows.y < 435) {
this.add.image(value, 175, 'gold_medal');
score += 5;
}
//Silver medal
else if (395 < newArrows.y && newArrows.y < 450) {
this.add.image(value, 175, 'silver_medal');
score += 3;
}
//Bronze medal
else if (380 < newArrows.y && newArrows.y < 460) {
this.add.image(value, 175, 'bronze_medal');
score += 1;
}
else {
this.add.image(value, 175, 'no_medal');
}
//Set the scoreboard to the new score
scoreBoard.setText('SCORE: ' + score);
}
}
函数更新()
{
//声明用于移动的常量
常数=1500;
this.player.setDrag(2000);
//球员的轮换
if(this.cursors.up.isDown&&this.player.angle>-45){
this.player.angle-=angleModifier;}
if(this.cursors.down.isDown&&this.player.angle<0){
this.player.angle+=angleModifier;}
//用空格键射击
if(移相器.输入.键盘.JustDown(这个.空格键)){
//拍摄动画
这个.player.anims.play('shoot',true);
//射箭
设arrow=this.physics.add.sprite(this.player.x,(this.player.y+20),'arrow');
//确保箭头有一个点击框
arrow.enableBody=true;
//让箭头移动
arrow.body.immoved=false;
//编辑箭头点击框
箭头。设置大小(50,15)。设置偏移(5,50);
arrow.setGravityY(3600);//重力会影响箭头
//箭速
arrow.setVelocityX(arrowMoveAmt);
arrow.setVelocityY((this.player.angle*50));
this.arrows.push(arrow);//将arrow添加到先前创建的数组中
this.arrowSound.play();//播放声音
//重置角度修改器以增加难度
angleModifier=(Math.random()+.1)*2;
}
else if(target.body.toucting.left){
//循环变量
设i=0;
//确定新奖牌的初始位置
设firstMedalX=180;
//循环以创建多个箭头
而(i//Move the target
var x = target.x;
target.x += 10;
var x2 = target.x;
var arrowMove = x2 - x;
newArrows.x = newArrows.x + arrowMove;
console.log("Target X = " + target.x);
console.log("Arrows X = " + newArrows.x);
//Move the target
target.x += 10;
function update ()
{
//Declare constants for movement
const arrowMoveAmt = 1500;
this.player.setDrag(2000);
//Rotation of the player
if (this.cursors.up.isDown && this.player.angle > -45) {
this.player.angle -= angleModifier;}
if (this.cursors.down.isDown && this.player.angle < 0) {
this.player.angle += angleModifier;}
//Shooting with the spacebar
if (Phaser.Input.Keyboard.JustDown(this.spacebar)) {
//Animate the shooting
this.player.anims.play('shoot', true);
//Arrow shooting
let arrow = this.physics.add.sprite(this.player.x, (this.player.y + 20), 'arrow');
//Make sure the arrow has a hitbox
arrow.enableBody = true;
//Let the arrow move
arrow.body.immovable = false;
//Edit arrow hitbox
arrow.setSize(50, 15).setOffset(5, 50);
arrow.setGravityY(3600); //Gravity will affect the arrows
//Arrow speeds
arrow.setVelocityX(arrowMoveAmt);
arrow.setVelocityY((this.player.angle * 50));
this.arrows.push(arrow); //Add arrow to the array created earlier
this.arrowSound.play(); //Play the sound
//Reset the angle modifier for added difficulty
angleModifier = (Math.random() + .1) * 2;
}
else if(target.body.touching.left) {
//Variable for loop
let i = 0;
//Set initial position of new medals
let firstMedalX = 180;
//Loop to create multiple arrows
while (i < this.arrows.length) {
newArrows = this.arrows[i];
newArrows.setGravityY(0);
newArrows.setVelocityX(0);
newArrows.setVelocityY(0);
//Add 30 to the new medal's x position
firstMedalX += 40;
//Increment for every arrow shot
i++;
//Reset the player angle for difficulty
this.player.angle = 0;
// Move the arrows
newArrows.x += 10
}
//Move the target
target.x += 10;
//Call the function to determine medal and pass the variable
if(this.arrows.length <= 5) {
//Only track the first five arrows
getMedal(firstMedalX);
}
}
//Function to decide medal, and where it goes
getMedal = (value) => {
//Gold medal
if (410 < newArrows.y && newArrows.y < 435) {
this.add.image(value, 175, 'gold_medal');
score += 5;
}
//Silver medal
else if (395 < newArrows.y && newArrows.y < 450) {
this.add.image(value, 175, 'silver_medal');
score += 3;
}
//Bronze medal
else if (380 < newArrows.y && newArrows.y < 460) {
this.add.image(value, 175, 'bronze_medal');
score += 1;
}
else {
this.add.image(value, 175, 'no_medal');
}
//Set the scoreboard to the new score
scoreBoard.setText('SCORE: ' + score);
}
}