Hjælp til noget med at tegne

Tags:    java

Hej udviklere,

jeg skrev for knap en uge siden vedr. mit eksamenprojekt til Programmering C på HTX. Jeg har besluttet mig for at jeg vil prøve at arbejde i at lave et "tegn og gæt" spil der fungerer med flere spillere på netværket.
Kan godt være det er lidt optimistisk, men om ikke andet vil jeg i hvert fald prøve at arbejde med tegnedelen af programmet, men er allerede her stødt på problemer.

Jeg har ind til videre lavet at program der har et MouseDragged event der kalder repaint efter musens koordinater er sat. I mit paint() event bruger jeg så følgende kode:
Fold kodeboks ind/udJava kode 

x1 og y1 er de koordinater sat igennem MouseDragged().

Problemet er dog at når jeg forsøger dette, og trækker musen bare ved nogenlunde normal hastighed, hopper mine pixels helt vildt og den tegnede streg bliver langt fra jævn.

Er der nogen der har en anden metode til tegne med musen så man kan få en jævn streg?

Hele koden for programmet er her:

Fold kodeboks ind/udJava kode 





4 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Fint arbejde.
Jeg vil personligt anbefale dig at bruge Swing komponenterne så meget muligt. Så istedet for Frame så brug JFrame.

Husk også at sætte:
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


Men derudover er jeg også lige lidt i tvivl hvorfor det ikke virker.
Prøv at bruge draw() i stedet for. Den er lavet til at tegne streger.
Fold kodeboks ind/udKode 


Hvis det ikke virker ville jeg prøve at sætte et JPanel på dit JFrame, og så tegne på det i stedet. Det ville være en programmeringsmæssig bedre løsning, og det har jeg hvert fald erfaringer med at det virker ved.



Indlæg senest redigeret d. 17.01.2011 12:19 af Bruger #5097
Det ser måske ud til at have noget at gøre med ydelsen af ens hardware. På min nu efterhånden middelmådige stationær er det en sammenhængende linje ved "normal" tegning. Ved hurtig tegning er det små firkantede prikker som jeg tror er dem du omtaler.

Java kan åbenbart ikke nå at opfange alle af musens bevægelser. En mulig løsning er at lave et Line2D objekt (http://download.oracle.com/javase/1.4.2/docs/api/java/awt/geom/Line2D.html) på den MouseEvent du får og så tegne den som Theis foreslår. Der findes også andre Shapes som kan være brugbare. Kurver, circler osv..

Jeg ville også prøve at bruge Swing i stedet. Hvis du gør det så husk at starte GUI i swings egen tråd f.eks. sådan her:
Fold kodeboks ind/udKode 

Ellers kan du være uheldigt en sjælden gang i mellem at få en exception når det starter.

Husk at sørg for at dit program lukker ordentlig f.eks. på den metode Theis beskriver. Havde en applikation hvor jeg ikke gjorde det, visuelt lukkede programmede, men en times senere med en masse start og stop var der brugt et par GB ram og systemet var mildere sagt ustabilt.



Måske skulle du sætte dit startkoordinat på mousedown, og så sætte dit slutkoordinat ved mouse up. Så mangler du bare at tegne et gråt rect når du dragger med museknappen nede - for at skabe en illusion af at du dragger en rect...


Kender ikke så meget til Java, længere, men du skal huske at lave det dobbeltbuffered



Har kigget lidt på det og lavet et par ændringer som I har foreslået, og det er da også blevet mere jævnt, men er stadig ikke tilfreds når man bevæger musen hurtigt.

Koden ser nu ud som følger:
Fold kodeboks ind/udJava kode 





Indlæg senest redigeret d. 20.01.2011 11:44 af Bruger #8773
t