Jeg er ved at udvikle et lille brætspils-program med Swing. Jeg har fået
lavet mig et bræt, som jeg viser i en JLayeredPane med brikkerne som
JLabels med ImageIcons ovenpå i forskellige lag.
Så kunne det jo være smart hvis man kunne trække brikkerne med musen, og
det har jeg også i princippet fået til at virke. Men der sker det
mærkelige når man trækker en brik, at den for hver anden pixel man
flytter den hopper det rigtige sted hen, mens den på de andre pixels
hopper et godt stykke væk fra cursoren - en 50-100 pixels både
horisontalt og vertikalt, oftest i retning mod (0,0).
Dette betyder så også at brikken kun flytter sig ca. halvdelen af den
afstand musen flytter sig.
Er der nogen der har oplevet noget lignende, og har en ide til hvad
problemet er? Jeg er fuldstændig stumped - det er første gang jeg prøver
at lave en interaktiv GUI i Java.
Koden er desværre lidt omfattende at poste i sin helhed, men her er
noget af det relevante:
-- Fra brættet:
public void mouseDragged(MouseEvent me){
Piece p = (Piece)me.getComponent(); // p = den der blev trukket
Point pos = p.getLocation();
int dx = me.getX()-pos.x; // hvor meget trækker vi
int dy = me.getY()-pos.y;
p.select();
Iterator i = ib.getPieces().iterator();
while( i.hasNext() ){
Piece pc = (Piece) i.next();
if(pc.selected()) pc.translate(dx,dy);
}
}
-- fra brikken:
public void translate(int dx, int dy){
this.setLocation(this.getLocation().x+dx,this.getLocation().y+dy);
}
public boolean selected(){
return selected;
}
public void select(){
selected = true;
this.setBorder(BorderFactory.createLineBorder(Color.red));
}
Der kan være valgt flere brikker af gangen, og de skal allesammen rykkes
så langt som den ene brik her trækkes. Det virker fint, bortset fra at
alle de trukne brikker hopper, og de hopper ikke lige langt, ej heller i
samme retning.
--
-- [ kristian ] --------------------------------------------------------
--------------- [if( you->toppost() ) { killfilter->append( you ); }] --
--
|