关于processing的draw()

如何才能做到图形跟着鼠标移动没有重影的情况下,
还能点击鼠标像盖章一样让图形复制第二个在点击位置,
并且还能保持原来的图形跟随鼠标。
然后在下一次点击鼠标时取消原来复制的图形并重新生成在新点击位置。

如果是可以同时复制3个并在第4次点击时取消第一次复制的图形呢?

尽可能只用基础的代码,给个思路也好🙏🏻

思路
1、复制三个,再复制最后一个被替换大概就是
设置一个队列,每复制一个就判断长度,队列长度小于3就入队尾,一个长度等于3 就先出队再入队(也就是先删除队首 先进入的 再添加新的到对尾)
队列的使用参考代码可以参考这个:

2、至于上边的图形不被背景覆盖,图标跟随鼠标移动
参考这个博客,里面有个 图片跟随鼠标移动的示例:


如有问题及时沟通

  • 给每个图层设置唯一id
  • 把点击的图层以id的形式放入Map
  • 需要操作哪个图层时,从Map中获取

如有帮助,请采纳,十分感谢!

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ImageFollowMouse extends JFrame {
// 用于移动的图片
private ImageIcon iiPicture = new ImageIcon("wine.png");
// iX、iY 是鼠标的当前坐标,iWidth、iHeight 是图片的宽高
private int iX, iY, iWidth, iHeight;
public ImageFollowMouse() {
iWidth = iiPicture.getIconWidth();
iHeight = iiPicture.getIconHeight();
// 标签组件做鼠标衬底
JLabel jlImage = new JLabel(iiPicture);
jlImage.setSize(iWidth, iHeight);
iWidth /= 2;
iHeight /= 2;
// 鼠标移动处理事件
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent meObject) {
iX = meObject.getX();
iY = meObject.getY();
jlImage.setLocation(iX - iWidth, iY - iHeight);
}
});
// 鼠标单击处理事件
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent meObject) {
repaint();
}
});
add(jlImage);
setLayout(null);
setTitle("图片跟随鼠标移动");
setSize(640, 480);
setLocationRelativeTo(null);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics gphObject) {
super.paint(gphObject);
gphObject.drawImage(iiPicture.getImage(), iX - iWidth, iY - iHeight, null);
}
public static void main(String[] args) {
new ImageFollowMouse();
}
}
这是你要的效果 望采纳

跟随鼠标画图代码java_完成一个图形跟随鼠标的小程序
https://blog.csdn.net/weixin_42669344/article/details/114754248
首先自定义一个图形控件,设置右键菜单,可以选择鼠标跟随
鼠标跟随:让图片跟着鼠标轨迹move即可,方法有很多,记住,是Move(整个移动),不要用top+-,left+-
在点击位置纪录生成一个图片控件(控件存在数组里),把跟随鼠标的图片值赋给它。
满了3个,到第四个时(这个用变量控制,或者修改数组)把最先存储的控件Remove

参考以下代码

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionAdapter;

import java.awt.event.MouseMotionListener;

import java.awt.Graphics;

import java.awt.Graphics2D;

import javax.swing.JFrame;

import java.awt.*;

public class Cricle extends JFrame{

private int x,y,count;

private boolean flag;

public Cricle(){

this.setTitle("绘图");

this.setBounds(300,150,400,300);//设置大小和位置

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.addMouseListener(new MouseAdapter(){//添加鼠标监听

public void mousePressed(MouseEvent e){

x=e.getX();

y=e.getY();

count++;

flag=false; //单击没有移动时画黑色的圆

repaint();

}

public void mouseReleased(MouseEvent e){

flag=false;//停下是画黑色的圆

repaint();

}

});

this.addMouseMotionListener(new MouseMotionAdapter(){//鼠标移动事件

public void mouseDragged(MouseEvent e){

flag=true;//点住圆移动中画红色的圆

x=e.getX();

y=e.getY();

repaint();

}

});

flag=true;

}

public void paint(Graphics g){

super.paint(g);

Graphics2D g2d=(Graphics2D)g;

g2d.setStroke(new BasicStroke(2.0f));//设置圆的边框粗细

if(flag){

g.setColor(Color.red);

}else {

g.setColor(Color.black);

}

g.drawOval(x-20,y-20,40,40);

g.drawString(""+count,x,y);

}

public static void main(String arg[]){

Cricle c=new Cricle();

c.setVisible(true);

}

}