【问题标题】:Draw circles permanetly given an if statement - Processing在 if 语句中永久绘制圆圈 - 处理
【发布时间】:2018-05-26 11:41:18
【问题描述】:

我有一个if 语句,用于检查碰撞:

if (BallY == y && BallX == x) // check for collision
  {
    x = 80; // reset x to initial
    y = 240; // reset y to initial
    z = 100; //reset z to initial
  }

我在这个if 语句中有一个for 循环:

if (BallY == y && BallX == x) // check for collision
  {
    x = 80; // reset x to initial
    y = 240; // reset y to initial
    z = 100; //reset z to initial
    for (int i=50; i<width; i+=80)
    {
      fill(250,0,0);
      ellipse(i, 50, 70, 70);
    }
  }

所以重点是一旦发生碰撞,就在屏幕顶部画一条圆线。但是,此代码仅将它们绘制一秒钟,然后它们就消失了。考虑到发生碰撞,我如何让他们留下来?

【问题讨论】:

  • 如果某些东西被重置,那么你在其他地方有代码正在重绘你的画布。请添加minimal reproducible example 并说明您使用什么库来绘制
  • 这是在事件驱动的 GUI 中吗?如果是这样,那么解决方案就是根本不使用 for 循环。
  • 另外... 可能想与该用户合作。 stackoverflow.com/questions/50521106/…
  • @HovercraftFullOfEels 那么考虑到 if 语句,我将如何生成出现在顶部的圆圈?我不想一个一个画圆圈,所以我认为循环是最好的方法。

标签: java for-loop if-statement processing


【解决方案1】:

您可能希望使用boolean 值来跟踪球是否发生碰撞。检测到碰撞时将其设置为true,然后检查该值以决定绘制什么。这是一个简化的示例:

boolean drawRed = false;

void draw() {

  if (mouseY > height/2) {
    drawRed = true;
  }

  if (drawRed) {
    background(255, 0, 0);
  }
}

此代码默认绘制灰色背景,但如果鼠标进入窗口的下半部分,则会变为红色。即使您将鼠标移回顶部,它也会保持红色。

这只是一个简单的例子,但想法是一样的:使用一个变量来跟踪草图的状态,在满足您的条件时设置该变量,并检查该变量以决定绘制什么。

顺便说一句,您的碰撞检测有点可疑。您可能不想检查球是否在确切位置。相反,您可能想检查球是否与某个区域重叠。 Here 是有关处理中的碰撞检测的指南,可能有用。

如果您仍然无法正常工作,请将您的问题缩小到MCVE,而不是发布断开连接的 sn-ps 或您的完整草图。祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 2012-09-19
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多