# Bild schieben via Drag 'n Drop ist zu schnell!



## newnoise (24. Sep 2009)

Hallo,

nachdem ich nun die Basics einigermaßen verstanden habe, gehts los 
Und gleich tritt wieder ein Problem auf 
Zu sehen hier:
KLICK
Das Bild zieht sich viel zu schnell. Merkt ihr wahrscheinlich.

Aber ich finde partout den Haken in meinem Code nicht:


```
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.awt.event.*;

public class Map extends Applet implements MouseListener, MouseMotionListener
{
     Image my_gif;
     URL base;
     MediaTracker mt;
     
     int xposdiff = 0;
     int yposdiff = 0;
     int xpos = 0;
     int ypos = 0;
     int mousesposx;
     int mousesposy;

     Boolean mousedown = false;

     public void init()
     {
  		  addMouseListener(this);
  		  addMouseMotionListener(this);

          mt = new MediaTracker(this);

         try {

               base = getDocumentBase();
         }
         catch (Exception e) {}

          my_gif = getImage(base,"pics/1/im0_0.png");
          mt.addImage(my_gif,1);

         try {
               mt.waitForAll();
          }
          catch (InterruptedException  e) {  }

 
     }

     public void paint(Graphics g)
     {
          g.drawImage(my_gif,xpos,ypos,this);
     }

     public void mouseDragged(MouseEvent me)
	 {
		    int deltax = mousesposx - me.getX();
		 	int deltay = mousesposy - me.getY();

		 	xpos -= deltax;
		 	ypos -= deltay;
	        repaint();
		 }

	 public void mousePressed(MouseEvent me)
	 {
		 	 mousesposx = me.getX();
		 	 mousesposy = me.getY();
	 }

	 public void mouseReleased(MouseEvent me)
	 {}
     public void mouseMove(MouseEvent me)
     {}
	 public void mouseExited(MouseEvent me)
	 {}
	 public void mouseEntered(MouseEvent me)
	 {}
	 public void mouseClicked(MouseEvent me)
	 {}
	 public void mouseMoved(MouseEvent me)
	 {}
}
```

Vielen, vielen Dank!


----------



## MiDniGG (24. Sep 2009)

newnoise hat gesagt.:


> ```
> int deltax = mousesposx - me.getX();
> int deltay = mousesposy - me.getY();
> 
> ...



Wieso machst Du nicht einfach:


```
xpos = me.getX();
ypos = me.getY();
repaint();
```

Das sollte doch das Problem beheben, oder nicht?

Du kannst ja dann noch die Bildgröße durch 2 Teilen, sodass Du das Bild in der Mitte verschiebst o.ä. ...


----------



## newnoise (24. Sep 2009)

na das hatte ich erst, dann springt das bild aber halt immer zum cursor.
habs nun aber hinbekommen.
danke!




gibt aber nen weiteres problem.
der flackert nun immer so beim scrollen. kriegt man das irgendwie weg?

danke!


----------



## Heady86 (24. Sep 2009)

Das flackern kommt durch die update() Methode.

Die löscht beim Aufruf den Background und ruft dann die paint() auf. Somit wird bei einer Änderung ständig repaint() aufgerufen was wiederum zum update() führt.

Das Flackern ensteht also durch das ständige löschen und neuzeichnen.

Lösung:

update() Methode überschreiben mit dem Ziel die paint() Methode direkt aufrufen zu können (damit der Background nicht immer gelöscht wird)

Grüße


----------



## newnoise (24. Sep 2009)

ja sowas hatte ich vermutet.
womit muss ich die update() methode denn überschreiben? einfach leer?


----------



## Heady86 (28. Sep 2009)

> womit muss ich die update() methode denn überschreiben? einfach leer?



Ne, du musst ja die paint() direkt aufrufen. Versuchs mal so:


```
public void update (Graphics g) {
   paint(g);
}
```


----------



## newnoise (28. Sep 2009)

funktioniert.

danke!


----------

