Java 处理代码-触摸屏橡皮擦代码

Java 处理代码-触摸屏橡皮擦代码,java,processing,multi-touch,Java,Processing,Multi Touch,当我向我的讲师征求关于团队项目的一段代码的建议时,我被引导到了这个论坛。一般的想法是,有两个图像在彼此的上面,用户可以擦去上面的图像,露出下面的一个 使用这个论坛上的一些其他项目,我已经成功地运行了基础知识,但是一旦用户放开鼠标,我就很难让代码回到起点 我也将感谢任何关于如何将其转换为使用触摸屏的建议。我已经看过处理应用程序中的多点触摸代码,但是它不允许我向其中添加图像,如果我尝试使用计算机软件,它似乎不喜欢多点触摸。这有什么办法吗 我目前拥有的代码如下,我将非常感谢您的任何建议或意见-提前感谢

当我向我的讲师征求关于团队项目的一段代码的建议时,我被引导到了这个论坛。一般的想法是,有两个图像在彼此的上面,用户可以擦去上面的图像,露出下面的一个

使用这个论坛上的一些其他项目,我已经成功地运行了基础知识,但是一旦用户放开鼠标,我就很难让代码回到起点

我也将感谢任何关于如何将其转换为使用触摸屏的建议。我已经看过处理应用程序中的多点触摸代码,但是它不允许我向其中添加图像,如果我尝试使用计算机软件,它似乎不喜欢多点触摸。这有什么办法吗

我目前拥有的代码如下,我将非常感谢您的任何建议或意见-提前感谢

PImage img, front;
int xstart, ystart, xend, yend;
int ray;

void setup()
{
    size(961, 534);
    img = loadImage("back.jpg");
    front = loadImage("front.jpg");
    xstart = 0;
    ystart = 0;
    xend = img.width;
    yend = img.height;
    ray = 50;
}

void draw() 
{
    {
        img.loadPixels();
        front.loadPixels();

        // loop over image pixels 
        for (int x = xstart; x < xend; x++)
        {
            for (int y = ystart; y < yend; y++ )
            {
                int loc = x + y*img.width;
                float dd = dist(mouseX, mouseY, x, y);        
                // pixels distance less than ray  

                if (mousePressed && dd < 50)
                {
                    // set equal pixel
                    front.pixels[loc] = img.pixels[loc];
                }
                else
                {
                    if (!mousePressed)
                    {
                      // reset- this is what I have not been able to work as of yet
                      front.pixels[loc] =   ;

                    }
                }
            }
        }
        img.updatePixels();
        front.updatePixels();
        // show front image
        image(front, 0, 0);
    }    
}
PImage img,前部;
int xstart、ystart、xend、yend;
内射线;
无效设置()
{
规模(961534);
img=loadImage(“back.jpg”);
front=loadImage(“front.jpg”);
xstart=0;
ystart=0;
xend=img.宽度;
yend=最小高度;
射线=50;
}
作废提款()
{
{
img.loadPixels();
loadPixels();
//循环图像像素
对于(int x=xstart;x
我建议使用a,而不是更改图像的像素。创建一个空图像并将其作为掩码关联到图像:

img=loadImage(“back.jpg”);
front=loadImage(“front.jpg”);
mask=createImage(img.width、img.height、RGB);
模拟面罩(面罩);
如果现在绘制两幅图像,则只能“看到”前面的
图像:

图像(前,0,0);
图像(img,0,0);
设置遮罩的颜色(255、255、255),而不是更改
front
的像素:

mask.pixels[loc]=颜色(255,255,255);
然后将遮罩重新应用于图像

img.mask(mask);
释放鼠标按钮时,必须将遮罩的像素更改回(0,0,0)或仅创建一个新的空遮罩:

mask=createImage(img.width,img.height,RGB);
请参见我将建议应用于原始代码的示例:

PImage img,正面,遮罩;
int xstart、ystart、xend、yend;
内射线;
无效设置(){
规模(961534);
img=loadImage(“back.jpg”);
front=loadImage(“front.jpg”);
mask=createImage(img.width、img.height、RGB);
模拟面罩(面罩);
xstart=0;
ystart=0;
xend=img.宽度;
yend=最小高度;
射线=50;
}
作废提款(){
img.loadPixels();
loadPixels();
//循环图像像素
对于(int x=xstart;x
很抱歉,但现在还不太清楚你在问什么。你能试试看吗?哪一行代码的行为与您预期的不同?谢谢您的回复!我没有想到这个选项,但是当我用你建议的调整实现代码时,我得到了一个坚实的灰色屏幕——你知道为什么会发生这种情况吗?谢谢你的帮助@当然,我已经测试了我发布的代码。你所要做的就是复制/粘贴。我已经复制并粘贴了上面的代码,但它仍然显示为纯灰色屏幕-有什么想法吗?谢谢@不,我不知道。我只是再次尝试了我答案的代码(复制/过去),效果很好。当然,我的图像和你的不同。但这可能不是问题所在。纹理是否位于您的系统中?嗯,很奇怪-图像位于正确的位置,因此我必须查看它-谢谢您的帮助!