【问题标题】:How do I detect the collision between the bullet and the enemy? [duplicate]如何检测子弹与敌人之间的碰撞? [复制]
【发布时间】:2022-01-13 11:01:30
【问题描述】:

我正在创建一个射击游戏,但我不确定如何让它检测到子弹击中敌人的事实。这是给出的布尔值

 boolean isShot(Bullet bullet) //is shot sequence
  {
    if (bullet!=null)
    {
      if (abs(this.x - bullet.x) < 20  &&
        abs(this.y - bullet.y) < 20)
        return true;
    }
    return false;
  }

这是我尝试让它检测到碰撞并让敌人消失的部分,但无论我尝试什么,它都会不断给我错误。

 import java.util.ArrayList;

int score;
Player p1;
Enemy[] e= new Enemy[4];
ArrayList<Bullet> bullet = new ArrayList<Bullet>();

void setup()
{
  size (1000, 1000);
  p1= new Player(500,5, 40);
  e[1]= new Enemy(100,1000,3);
   e[2]= new Enemy(500,800,3);
    e[3]= new Enemy(700,700,3);
 //   b1= new Bullet(500,500,-5);
}

void draw()
{
  background(255);
  p1.render();
  e[1].render();
  e[1].move();
  e[2].render();
  e[2].move();
  e[3].render();
  e[3].move();
  text("Score:" + score,50,50);
  
  for (Bullet b: bullet)
  {
    b.render();
    b.move();
  }

if (e[1].isShot(Bullet))
{
  e[1]=null;
}

它位于这段代码的底部。当我尝试将子弹小写时,它说“函数 isShot() 需要像“isShot(Bullet)”这样的参数,但是当我将子弹中的 B 大写时,它告诉我子弹不是变量。

【问题讨论】:

  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA license 下授予 SE 分发内容的不可撤销的权利(无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何此类破坏性编辑都将被还原。请参阅How does deleting work?,详细了解如何在本网站上删除内容。

标签: java processing


【解决方案1】:

带有小写 b 的“bullet”是一个子弹数组,但 isShot() 需要一个单个子弹对象。大写 B 的“Bullet”不是变量,而是一个类(我想)。

因此,您要么需要创建另一个 Bullet 对象,要么在“bullet”ArrayList 中使用其中一个 Bullet 对象。

【讨论】:

    【解决方案2】:

    你快到了。 我建议您为参数使用更有意义的名称。 首先,您必须将 ArrayList bullet 填充到您的 setup() 或代码中您想要的其他位置。

    在此之后,如果您想使用 isShot 函数检查该条件,您应该向它传递一个 Object 的实例,而不是 Object 类本身。

    这可以通过在你的 for 循环中包含函数来轻松实现。

    虽然练习总是很好,但我建议您先了解该语言的基础知识,然后再学习更复杂的示例(自定义类、数组迭代等)。

    void setup()
    {
      size (1000, 1000);
      p1= new Player(500,5, 40);
      e[1]= new Enemy(100,1000,3);
       e[2]= new Enemy(500,800,3);
        e[3]= new Enemy(700,700,3);
        bullet.add(new Bullet(500,500,-5)); // e.g. to populate array
    }
    
    void draw()
    {
      background(255);
      p1.render();
      e[1].render();
      e[1].move();
      e[2].render();
      e[2].move();
      e[3].render();
      e[3].move();
      text("Score:" + score,50,50);
      
      for (Bullet b: bullet)
      {
        b.render();
        b.move();
    
        if (e[1].isShot(b)) // now you can use b which is an instance of Bullet
        {
         e[1]=null;
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2013-04-07
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多