所以,我正在处理一个处理项目,它允许我使用图像作为光标,但我一直遇到光标图像问题,因为它一直在闪烁。我读到如果光标图像太大,它会不断闪烁。但是,我想知道是否有任何方法可以保持我的图像大小,同时仍然将其保持为光标。或者,
我想知道是否有代码可以让我按下图像并将其拖动到屏幕上。 :/
这是我一直在使用的代码。
// Declaring a variable of type PImage
PImage img;
PImage img2;
void setup() {
size(815,514);
// Make a new instance of a PImage by loading an image file
img = loadImage("preamble.jpg");
img2 = loadImage("blackgun.png");
}
void draw() {
background(0);
// Draw the image to the screen at coordinate (0,0)
image(img,0,0);
//using the image as the cursor
if (mouseX < 50) {
cursor(img2);
} else {
cursor(img2);
}
}
答案 0 :(得分:1)
在reference中,他们说:“建议将大小设置为16x16或32x32像素”,将其用作光标。您可以通过调用resize来执行此操作:
img2 = loadImage("blackgun.png");
img2.resize(32,32);
这一行也没有意义:
if (mouseX < 50) {
cursor(img2);
} else {
cursor(img2);
}
无论哪种方式,你都会得到与光标图像相同的img2。
你可以使用:
image(img, mouseX, mouseY);
但光标将在图像上方。
这是一个简单而可怜的拖累...... 我在这里有一个更好的拖放的旧例子,它使用rects()intead图像,但想法是相同的,你可以很容易地适应它使用图像:
DragMe[] drags = new DragMe[40];
void setup() {
size(400, 400);
for (int i = 0; i < drags.length; i++) {
drags[i] = new DragMe();
}
}
void draw() {
background(255);
for (int i = 0; i < drags.length; i++) {
drags[i].display();
drags[i].update();
}
}
void mousePressed() {
for (int i = 0; i < drags.length; i++) {
if (!drags[i].isOver())
drags[i].dontMove = true;
drags[i].offset_x = mouseX - drags[i].pos_x;
drags[i].offset_y = mouseY - drags[i].pos_y;
}
}
void mouseReleased() {
for (int i = 0; i < drags.length; i++) {
drags[i].locked = false;
drags[i].dontMove = false;
}
}
class DragMe {
float pos_x, pos_y, SIZE = 20;
float prev_x, prev_y;
boolean locked;
boolean dontMove;
color c = color (0, 170, 170);
float offset_x, offset_y;
DragMe() {
pos_x = random(width-SIZE);
pos_y = random(height-SIZE);
}
void update() {
if (isOver() && !locked && !dontMove || locked && !dontMove )
c = color (170);
else
c = color (0, 170, 170);
if (isClicked()) {
locked = true;
}
if (locked && !dontMove) {
pos_x = mouseX - offset_x;
pos_y = mouseY - offset_y;
}
}
void display() {
fill(c);
rect(pos_x, pos_y, SIZE, SIZE);
}
boolean isOver() {
float right_x = pos_x + SIZE;
float bottom_y = pos_y + SIZE;
return mouseX >= pos_x && mouseX <= right_x &&
mouseY >= pos_y && mouseY <= bottom_y;
}
boolean isClicked() {
return isOver() && mousePressed && !dontMove;
}
}