2013-04-30 58 views
0

所以,我正在处理一个处理项目,它允许我使用图像作为光标,但由于光标图像一直在闪烁,所以我一直遇到问题。我读到,如果光标图像太大,它会不断闪烁。但是,我想知道是否有任何方法可以保持图像的大小,同时仍然将它保持为光标。 OR,使用光标移动图像

我想知道是否有代码让我按下图像并将它拖拽到屏幕上。 :/

这是我一直在使用的代码。

// 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); 
    } 
} 

回答

1

reference他们说:“这是建议使尺寸16×16或32×32像素”左右图像被用作光标。您可以通过调用调整大小做到这一点:

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; 
    } 
}