How can I drag a world?


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import greenfoot.*; public class Pad extends World { GreenfootImage image = new GreenfootImage( "fractal.png" ); // the oversized image int imgX, imgY; // holds current image offsets int prsX, prsY; // holds where mouse button first pressed boolean dragging; // flags dragging state public Pad() { super ( 400 , 400 , 1 ); setBackground(image); } public void act() { if (!dragging && Greenfoot.mousePressed( null )) { MouseInfo mi = Greenfoot.getMouseInfo(); prsX = mi.getX(); prsY = mi.getY(); dragging = true ; } if (dragging && Greenfoot.mouseDragged( null )) { MouseInfo mi = Greenfoot.getMouseInfo(); updateBackground(imgX - (prsX - mi.getX()), imgY - (prsY - mi.getY())); } if (dragging && Greenfoot.mouseDragEnded( null )) { MouseInfo mi = Greenfoot.getMouseInfo(); boolean bgChanged = updateBackground(imgX - (prsX - mi.getX()), imgY - (prsY - mi.getY())); if (bgChanged) { imgX -= prsX - mi.getX(); imgY -= prsY - mi.getY(); } dragging = false ; } } public boolean updateBackground( int x, int y) { if (x > 0 || x < getWidth() - image.getWidth() + 1 || y > 0 || y < getHeight() - image.getHeight() + 1 ) { updateBackground(imgX, imgY); return false ; } GreenfootImage bg = new GreenfootImage(getWidth(), getHeight()); bg.drawImage(image, x, y); setBackground(bg); return true ; } } |