我有一个处理" 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
的命令。因此,当用户尝试启动另一行时,代码认为他/她从未抬起手指开始。
我该如何解决这个问题? 感谢。
答案 0 :(得分:1)
您没有正确地考虑它:mousePressed
变量在您的移动设备上完全按预期工作 - 如果不是,您将永远不会看到任何行。
问题在于pmouseX
和pmouseY
变量。这些变量保存鼠标的先前位置。在桌面上,该位置是光标的上一个位置。当您移动光标时,pmouseX
和pmouseY
变量会更新。
但是,在移动设备上,您没有光标,因此pmouseX
和pmouseY
变量会保留您用手指触摸的最后一个位置。这就是造成你所看到的行为的原因。
要解决此问题,您必须使用自己使用鼠标事件功能设置的变量,这样您就可以更好地控制它们。像这样:
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;
}