1

我目前正在 Code.org 的游戏实验室从事一个项目。在这个游戏中,如果物体(蜜蜂)与另一个物体碰撞,它的速度应该永久增加。有没有办法做到这一点?这是一个链接:

https://studio.code.org/projects/gamelab/bObYvRkfcSN938ptuiIyH0ZdF1de4jhaiOYZLgfTTwM/edit

这是一个代码片段:

//Making the bee
var bee = createSprite(200, 200);
//Set animation for 'bee' as bee_1
bee.setAnimation("bee_1");
//Scaling the bee tp 0.5x
bee.scale = 0.5;

var velocity = 2;
bee.velocityY = velocity;

//Making the walls


function draw() {
  background("white");

  createEdgeSprites();

  bee.bounceOff(edges);

  if (bee.isTouching(edges)) {
    velocity = velocity * 1.25;
  }
  /*
  if (keyDown("up")) {
    bee.velocityX = 0;
    bee.velocityY = velocity * -1;
  }
  else if (keyDown("down")) {
    bee.velocityX = 0;
    bee.velocityY = velocity;
  }
  else if (keyDown("right")) {
    bee.velocityX = velocit;
    bee.velocityY = 0;
  }
  else if (keyDown("left")) {
    bee.velocityX = -2;
    bee.velocityY = 0;
  }
  
  if (velocity>15) {
    velocity = 10;
  }
  else if (velocity<-15) {
    velocity = -10;
  }*/

  drawSprites();
}

不幸的是,由于我无权访问 HTML 和 CSS 代码,因此无法运行该代码段。我曾尝试使用 isTouching() 方法,但该方法仅在蜜蜂接触墙壁时才有效。我需要一种方法来做到这一点,以便当蜜蜂与任何物体碰撞时(我计划添加更多充当墙壁的精灵),该velocity变量设置为自身的 1.25 倍。IE

if (<insert condition here>) {
    velocity = velocity * 1.25;
}

我也将不胜感激有关如何改进我的代码的任何其他提示。

4

1 回答 1

0

我做了你想让我为速度做的事情,并添加了我认为你可以如何改进你的代码。如果您不想这样做,则不必进行更改。它只是可选的。这是条件本身的代码:

  if (bee.bounceOff(s_edges)) {
    velocity = velocity * 1.25;
  }

如果你想要完整的代码,那么这里是:

showMobileControls(false, true, true, true);

var player = createGroup();
//Making the bee
var bee = createSprite(200,200);
//Set animation for 'bee' as bee_1
bee.setAnimation("bee_1");
//Scaling the bee to 0.5x
//I changed it to 1 for us to see it better. I also made the "exit" bigger
bee.scale = 1;
player.add(bee);

//Game Over animation
var endAnimation = createGroup();
var gameOver = createSprite(200,200);
gameOver.setAnimation("GameOver");
gameOver.scale = 0.5;
endAnimation.add(gameOver);

//I turned it off for it to look "better"
bee.debug = false;

var velocity = 5;

//Making the edges
var s_edges = createGroup();
var edge_left = createSprite(2.5,200,5,400);
var ebound_left = createSprite(2.49,200,5,400);
var edge_right = createSprite(397.5,200,5,400);
var ebound_right = createSprite(397.61,200,5,400);
var edge_top = createSprite(200,2.5,400,5);
var ebound_top = createSprite(200,2.49,400,5);
var edge_bottom = createSprite(132.5,397.7,355,5);
var ebound_bottom = createSprite(170,397.5,340,5);
var bound = createSprite(370,440,100,30);
var left_bound = createSprite(311,408,8,40);
var right_bound = createSprite(397,408,10,40);
s_edges.add(edge_left);
s_edges.add(edge_right);
s_edges.add(edge_top);
s_edges.add(edge_bottom);

var bounds = createGroup();
bounds.add(bound);
bounds.add(left_bound);
bounds.add(right_bound);

var failsafe = createGroup();
failsafe.add(ebound_bottom);


function draw() {
  var checker = bee.isTouching(s_edges);
  
  background("white");
  
     if (checker === true) {
      velocity = velocity *1.25;
    }
  
    if (keyDown("up")) {
      bee.velocityX = 0;
      bee.velocityY = velocity * -1;
    }
    else if (keyDown("down")) {
      bee.velocityX = 0;
      bee.velocityY = velocity;
    }
    else if (keyDown("right")) {
      bee.velocityX = velocity;
      bee.velocityY = 0;
    }
    else if (keyDown("left")) {
      bee.velocityX = velocity * -1;
      bee.velocityY = 0;
    }
    
    if (velocity>25) {
      velocity = 10;
    }
    else if (velocity<-25) {
      velocity = -10;
    }
  //I did what you wanted for the increase velocity over here
  if (bee.bounceOff(s_edges)) {
    velocity = velocity * 1.25;
  }
    
    bee.bounceOff(s_edges);
    bee.collide(bounds);
    failsafe.collide(bee);
    
      drawSprites(s_edges);
      drawSprites(player);
      drawSprites(bounds);
  //I changed the bee x and y
    if (bee.y>390 && 311<bee.x<311) {
      bee.destroy();
      background("gray");
      drawSprites(endAnimation);
    }
}

如果你想在 code.org 中找到它,那么这里是: https ://studio.code.org/projects/gamelab/9Plf9wVdWthBxs8ML0ebRFWoQ73oI_VPiUk_o_tNhtk

于 2020-05-14T21:23:02.333 回答