01. september 2005 - 19:04
Der er
21 kommentarer og 1 løsning
Java: Baggrunden "blinker"
Hej, jeg vil prøve at lave et lille spil. Men hver gang jeg trykker et sted i applet'en, så blinker selve baggrunden omme bagved, hvordan forhindre jeg det? Her er min kode. import java.awt.*; import java.applet.*; import java.awt.event.*; public class Test extends Applet implements MouseListener { Image baggrund; Point mouseDown = null; public void init() { addMouseListener(this); } public void paint(Graphics g) { baggrund = getImage(getCodeBase(),"room.gif"); g.drawImage(baggrund,0,0,this); if (mouseDown != null) g.drawString("Her", mouseDown.x, mouseDown.y); } public void mouseClicked(MouseEvent e) { mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }
Annonceindlæg fra Idura
01. september 2005 - 19:14
#1
Slet ingen hurtige respons?
01. september 2005 - 19:26
#2
Eksperten har et email problem, så der bliver ikke sendt email ud om nye spørgsmål til dem som anbonnerer på kategorien det kan være en årsag til den manglende respons
01. september 2005 - 19:27
#3
spørgsmålet ligger iøvrigt uden for mit område
01. september 2005 - 19:30
#4
Er du ikke god til Java d?
01. september 2005 - 19:33
#5
måske men ikke til alt indenfor java !
01. september 2005 - 20:45
#6
Okay, må vente så! >_<
01. september 2005 - 22:03
#7
02. september 2005 - 10:25
#8
Kan ikke rigtigt se hvad det har med spørgsmålet at gøre. Men kan du fortællle mig hvorfor den blinker hver gang jeg trykker et sted på skærmen+
02. september 2005 - 10:33
#9
Fordi du repainter det hele. Kig lige en ekstra gang på linket, og så læs det der står der. Så vil du finde ud af at der er noget der hedder double buffering, som er meget nyttigt i grafik sammenhæng. Eksemplet fra linket: 1. Firkant - der blinker teksten, når du kører musen rundt (fordi der er lavet som du har lavet det). 2. Firkant - der blinker teksten, når du kører musen rundt (bare et eksempel på hvordan man ikke skal gøre). 3. Firkant - der blinker teksten ikke. Fordi der bliver brugt double buffering.
02. september 2005 - 10:37
#10
"Fordi du repainter det hele" Skal nok være: "Fordi du tegner direkte på din applet"
02. september 2005 - 10:38
#11
Og så er der heller ikke nogen grund til at loade billedet hver gang. Brug i stedet din init metode: public void init() { addMouseListener(this); baggrund = getImage(getCodeBase(),"room.gif"); }
02. september 2005 - 14:07
#12
Hej igen. Nu har jeg prøvet lidt, og læst hvad du har skrevet osv. Og er kommet frem til dette, men nu siger den variabel "g" ikke findes, fordi jeg prøver at sætte en baggrund uden en public-paint. Se her, og fortæl mig hvad jeg gør forkert. import java.awt.*; import java.applet.*; import java.awt.event.*; public class chatApplet extends Applet implements MouseListener { Image baggrund; Point mouseDown = null; public void init() { addMouseListener(this); baggrund = getImage(getCodeBase(),"room.gif"); g.drawImage(baggrund,0,0,this); } public void paint(Graphics g) { if (mouseDown != null) g.drawString("Her", mouseDown.x, mouseDown.y); } public void mouseClicked(MouseEvent e) { mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} } - Skal siges det ikke nytter at sætte g.drawImage .. ved public-paint, for så blinker den aligevel.
02. september 2005 - 16:10
#13
Kan du se hvor problemet ligger?
02. september 2005 - 16:13
#14
Du skal beholde: g.drawImage(baggrund,0,0,this); i din paint-metode.
02. september 2005 - 16:17
#15
Skal siges det ikke nytter at sætte g.drawImage .. ved public-paint, for så blinker den aligevel. -- Men aligevel blinker den. Du mener sådan ikk'? import java.awt.*; import java.applet.*; import java.awt.event.*; public class chatApplet extends Applet implements MouseListener { Image baggrund; Point mouseDown = null; public void init() { addMouseListener(this); baggrund = getImage(getCodeBase(),"room.gif"); } public void paint(Graphics g) { g.drawImage(baggrund,0,0,this); if (mouseDown != null) g.drawString("Her", mouseDown.x, mouseDown.y); } public void mouseClicked(MouseEvent e) { mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }
02. september 2005 - 16:24
#16
??
02. september 2005 - 17:13
#17
Har du læst hvad der står i det link?
02. september 2005 - 17:27
#18
Ja. Men det nytter ikke meget når jeg ikke kan en særlig stor del af Java, men det jeg skrev ovenover, det var det du mente ikke? - Somsagt kan jeg ikke se hvor i alverden den fejl skulle være, for har jo sat g.drawImage(baggrund,0,0,this); i paint-metoden og baggrund = getImage .... i init-metoden, kan du fortælle mig det?
02. september 2005 - 17:27
#19
Så får du det serveret: import java.awt.*; import java.applet.*; import java.awt.event.*; public class DoubleBuffering extends Applet implements MouseListener { Image offScreen; Graphics bufferGfx; Image baggrund; Point mouseDown = null; public void init() { addMouseListener(this); baggrund = getImage(getCodeBase(),"test.png"); offScreen = createImage (this.getWidth(), this.getHeight()); bufferGfx = offScreen.getGraphics(); } public void paint(Graphics g) { bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight()); bufferGfx.drawImage(baggrund,0,0,this); if (mouseDown != null) bufferGfx.drawString("Her", mouseDown.x, mouseDown.y); g.drawImage(offScreen,0,0,this); } public void mouseClicked(MouseEvent e) { mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void update (Graphics g) { paint(g); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }
02. september 2005 - 17:31
#20
Mange tak og undskyld fordi jeg ikke rigtigt forstod det. Er ikke så kvik indefor Java.
02. september 2005 - 17:31
#21
Du skal bare lige omdøbe klassen til at hedde det, du har kaldt den. Og ændre navnet på billedet. Så skulle det køre uden at blinke :)
02. september 2005 - 17:32
#22
Det er ikke noget at undskylde. Det er bare meget sent du fortæller hvor meget java du kan. Og derfor er det svært at give den rigtige hjælp.
Kurser inden for grundlæggende programmering