在移动设备上处理mousePressed等效项

时间:2015-12-27 23:26:22

标签: processing

我有一个处理" app"各种各样的,允许用户绘制任何东西。它在桌面(有一个鼠标)上运行良好,但在我的iPhone上它并不完美。

现在,当用户触摸屏幕进行绘制时,当他/她在屏幕上移动手指时会出现白线,就像它应该的那样。然而,当手指被抬起并放置在屏幕的另一部分上时,不会形成与第一个分开的新线。相反,原始线跳转到用户触摸的位置。我希望在桌面和移动设备上启动新的线路。

以下是代码:

void setup() {
    size(screen.width, screen.height);
    background(0);
}

void draw() {
    stroke(225);
    strokeWeight(4);
    smooth();
    if (mousePressed) {
        line(pmouseX, pmouseY, mouseX, mouseY);
    }
}

我为何会发生这种情况的理论:在移动设备上没有" mousePressed"或任何其他具有术语mouse的命令。因此,当用户尝试启动另一行时,代码认为他/她从未抬起手指开始。

我该如何解决这个问题? 感谢。

1 个答案:

答案 0 :(得分:1)

您没有正确地考虑它:mousePressed变量在您的移动设备上完全按预期工作 - 如果不是,您将永远不会看到任何行。

问题在于pmouseXpmouseY变量。这些变量保存鼠标的先前位置。在桌面上,该位置是光标的上一个位置。当您移动光标时,pmouseXpmouseY变量会更新。

但是,在移动设备上,您没有光标,因此pmouseXpmouseY变量会保留您用手指触摸的最后一个位置。这就是造成你所看到的行为的原因。

要解决此问题,您必须使用自己使用鼠标事件功能设置的变量,这样您就可以更好地控制它们。像这样:

boolean newTouch = true;
float previousTouchX;
float previousTouchY;

void setup() {
  size(500, 500);
  background(0);
}

void draw() {
  stroke(225);
  strokeWeight(4);
  smooth();

  if (mousePressed) {
    if (newTouch) {
      newTouch = false;
    } else {
      line(previousTouchX, previousTouchY, mouseX, mouseY);
    }

    previousTouchX = mouseX;
    previousTouchY = mouseY;
  }
}

void mouseReleased() {
  newTouch = true;
}