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
很抱歉,但现在还不太清楚你在问什么。你能试试看吗?哪一行代码的行为与您预期的不同?谢谢您的回复!我没有想到这个选项,但是当我用你建议的调整实现代码时,我得到了一个坚实的灰色屏幕——你知道为什么会发生这种情况吗?谢谢你的帮助@当然,我已经测试了我发布的代码。你所要做的就是复制/粘贴。我已经复制并粘贴了上面的代码,但它仍然显示为纯灰色屏幕-有什么想法吗?谢谢@不,我不知道。我只是再次尝试了我答案的代码(复制/过去),效果很好。当然,我的图像和你的不同。但这可能不是问题所在。纹理是否位于您的系统中?嗯,很奇怪-图像位于正确的位置,因此我必须查看它-谢谢您的帮助!