willbend Skrevet 20. februar 2005 Del Skrevet 20. februar 2005 (endret) Her er spillet: import java.awt.*; import java.applet.*; public class dag extends Applet implements Runnable { Thread th; int x_pos = 10; int y_pos = 100; int speed=2; int y_speed=0; int a=300; int b=250; int c=50; int d=50; Image offscreen; Graphics bufferGraphics; public void init() { setBackground(Color.black); offscreen=createImage(700,400); bufferGraphics=offscreen.getGraphics(); } public void start() { th=new Thread(this); th.start(); } public void stop() { } public void destroy() { } public boolean keyDown(Event e,int key) { if(key==Event.LEFT) { speed=-2; y_speed=0; } else if(key==Event.RIGHT) { speed=+2; y_speed=0; } else if(key==Event.DOWN) { y_speed=+2; speed=0; } else if(key==Event.UP) { y_speed=-2; speed=0; } else { } return true; } public void run () { while(true) { x_pos=x_pos+speed; y_pos=y_pos+y_speed; repaint(); try{ Thread.sleep(5); } catch(InterruptedException ex){} } } public void paint (Graphics g) { bufferGraphics.clearRect(0,0,700,400); bufferGraphics.setColor(Color.red); bufferGraphics.fillRect(a,b,c,d); bufferGraphics.setColor(Color.yellow); bufferGraphics.fillRect(x_pos-20,y_pos-20,20,20); g.drawImage(offscreen,0,0,this); } public void update(Graphics g) { paint(g); } } Spørsmålet mitt er hvordan kan jeg få til sånn at den gule firkanten stopper når den "rører" borti den røde firkanten. Endret 20. februar 2005 av willbend Lenke til kommentar
willbend Skrevet 21. februar 2005 Forfatter Del Skrevet 21. februar 2005 Er det ingen som kan det? Lenke til kommentar
Mr.Garibaldi Skrevet 21. februar 2005 Del Skrevet 21. februar 2005 Er det ingen som kan det? Har du prøvd å sjekke koordinatene på firkantene, slik at hvis de overlapper så stopper den gule firkanten? Lenke til kommentar
willbend Skrevet 21. februar 2005 Forfatter Del Skrevet 21. februar 2005 Jeg greier ikke å tenke meg til hvordan kordinatene må være Lenke til kommentar
Patton Skrevet 21. februar 2005 Del Skrevet 21. februar 2005 Noe a'la: Rectangle r1 = new Rectangle(a,b,c,d); Rectangle r2 = new Rectangle(x_pos-20,y_pos-20,20,20); if(r1.intersects(r2)) { speed = 0; y_speed = 0; } burde fikse saken eller? Lenke til kommentar
willbend Skrevet 21. februar 2005 Forfatter Del Skrevet 21. februar 2005 Det funker ikke Lenke til kommentar
Mr.Garibaldi Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Det funker ikke Hva ved det fungerer ikke? Hvis du bare har prøvd å skrive inn koden slik han postet den, så vil den ikke fungere siden det ikke er en "intersects" metode ferdig i java (så vidt jeg vet). Men du burde kunne utlede et par muligheter for hvordan du kan løse problemet ut ifra den kodesnutten. Hvis det er dette du har forsøkt, så er det bedre om du poster den koden slik at vi kan komme med forslag til endringer, enn at vi skal gi deg ferdig kode. Lenke til kommentar
Patton Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Hvis du bare har prøvd å skrive inn koden slik han postet den, så vil den ikke fungere siden det ikke er en "intersects" metode ferdig i java (så vidt jeg vet). Joda, boolean java.awt.Rectangle.insersects(Rectangle r) Staar klart definert i javadocs. Koden maa selvfoelgelig (som Mr.Garibaldi sier) puttes inn hvor det passes, som f.eks.: public void run () { while(true) { Rectangle r1 = new Rectangle(a,b,c,d); Rectangle r2 = new Rectangle(x_pos-20,y_pos-20,20,20); if(r1.intersects(r2)) { speed = 0; y_speed = 0; } [...din kode...] Naa kan det vaere at koden trenger litt "tweaking" (kan ogsaa hende at jeg har glemt noe helt vesentlig), men du burde komme litt paa vei. Og ja, foelg Mr.Garibaldi's raad. "Det funker ikke" er ikke nok. Lenke til kommentar
Mr.Garibaldi Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Hvis du bare har prøvd å skrive inn koden slik han postet den, så vil den ikke fungere siden det ikke er en "intersects" metode ferdig i java (så vidt jeg vet). Joda, boolean java.awt.Rectangle.insersects(Rectangle r) Staar klart definert i javadocs. Kult, da har jeg lært noe nytt idag også, takker Jeg sjekket apien, men tydeligvis ikke godt nok.... Lenke til kommentar
Patton Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 Kult, da har jeg lært noe nytt idag også, takker Bare hyggelig Lenke til kommentar
willbend Skrevet 22. februar 2005 Forfatter Del Skrevet 22. februar 2005 Har ikke så my peiling på java Var det sånn her dere mente?: import java.awt.*; import java.applet.*; public class dag extends Applet implements Runnable { Thread th; int x_pos = 10; int y_pos = 100; boolean java.awt.Rectangle.insersects(Rectangle r) int speed=2; int y_speed=0; int a=300; int b=250; int c=50; int d=50; Image offscreen; Graphics bufferGraphics; Rectangle r2 = new Rectangle(x_pos-20,y_pos-20,20,20); Rectangle r1 = new Rectangle(a,b,c,d); public void init() { offscreen=createImage(700,400); bufferGraphics=offscreen.getGraphics(); } public void start() { th=new Thread(this); th.start(); } public void stop() { } public void destroy() { } public boolean keyDown(Event e,int key) { if(key==Event.LEFT) { speed=-2; y_speed=0; } else if(key==Event.RIGHT) { speed=+2; y_speed=0; } else if(key==Event.DOWN) { y_speed=+2; speed=0; } else if(key==Event.UP) { y_speed=-2; speed=0; } else { } return true; } public void run () { while(true) { if(r1.intersects(r2)) { speed = 0; y_speed = 0; } x_pos=x_pos+speed; y_pos=y_pos+y_speed; repaint(); try{ Thread.sleep(5); } catch(InterruptedException ex){} } } public void paint (Graphics g) { bufferGraphics.clearRect(0,0,700,400); bufferGraphics.fillRect(x_pos,y_pos,20,20); bufferGraphics.setColor(Color.red); bufferGraphics.fillRect(a,b,c,d); bufferGraphics.setColor(Color.yellow); g.drawImage(offscreen,0,0,this); } public void update(Graphics g) { paint(g); } } Lenke til kommentar
Patton Skrevet 22. februar 2005 Del Skrevet 22. februar 2005 (endret) Naar definerer r1 og r2 (som du nettopp har gjort) som klasse-variabler, saa vil variabel r1 og r2 ha en og samme verdi hele tiden, med mindre du endrer dem underveis. Siden den roede rektangelen aldri forandrer seg, saa kan r1 instansieres i klassevariabel definisjonene. r2 derimot (den gule klossen) forandrer verdi hele tiden. Altsaa boer du enten instansiere r2 ny for hver gang den brukes, eller du maa endre verdiene i r2 Altsaa, fjern r2 som klassevariabel, og sett foelgende inn i public void run() under while-loekka: while(true) { Rectangle r2 = new Rectangle(x_pos-20,y_pos-20,20,20); [...din kode...] eller la r2 bli hvor den er og gjoer foelgendes while(true) { r2.x = x_pos-20; r2.y = y_pos-20; [...din kode...] Edit: Malplasserte CODE-tag Endret 22. februar 2005 av Patton Lenke til kommentar
willbend Skrevet 22. februar 2005 Forfatter Del Skrevet 22. februar 2005 Er ikke så flink med java ennå. Skjønte ikke hva du mente. Kan noen skrive om koden? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå