elminzter Skrevet 17. mai 2006 Del Skrevet 17. mai 2006 (endret) Heisann, jeg har laga meg et lite spill her, men har litt problemer med å lage en meny som starter spillet opp... selve spillet fungerer fint for seg selv, når jeg kjører metoden min startGame() fra main....men om jeg kjører startGame() fra menyframen så vil ikke spillet tegnes... (selve spillet kjører, men tegnes ikke) noen forslag på hvordan dette kan fikses? (på forelesning har det blitt sagt at dette er fordi det er en tråd som ikke returnerer, men det sier meg veldig lite om hvordan jeg kan løse det... ) kan hele menygreia fungere uten å ha forskjellige frames? altså bytting av innhold? (vet CruellaDeVille startet tråd om dette nylig, men svarene der gir meg ikke så veldig mye....vet ikke helt hvordan jeg skal gripe det fatt) Endret 17. mai 2006 av elminzter Lenke til kommentar
Patton Skrevet 17. mai 2006 Del Skrevet 17. mai 2006 Her tror jeg vi trenger kildekoden for aa hjelpe deg videre. Lenke til kommentar
elminzter Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 (endret) Her tror jeg vi trenger kildekoden for aa hjelpe deg videre. 6119654[/snapback] vel, greit...sånn ser det ut akkurat nå: (har prøvd litt diverse) public void loadMenu() { JFrame menuframe = new JFrame("ratz!"); Menu menu = new Menu(); menuframe.add(menu); menuframe.setSize(800, 630); menuframe.setVisible(true); menuframe.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void loadGame() { JFrame frame = new JFrame("ratz!"); try { nextLevel(); } catch (NoMoreLevelsException e) { //skjer aldri, dette er første level } gfx = new Gfx(); frame.add(gfx); frame.setSize(800, 630); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); startGame(); } public static void main(String[] args) { Game game = getInstance(); //bruker singleton game.loadGame(); } Både Gfx og Menu klassene extends JPanel og har egne keylisteners... har prøvd å bytte ut loadGame() i main til loadMenu()....altså at main åpner menyen, og så kjører menyen Game.getInstance().loadGame() satser på det ikke trengs å paste mer fra de andre klassene... (?) Edit: startGame() inneholder kun while (gameRunning) { ... } Endret 17. mai 2006 av elminzter Lenke til kommentar
HV Skrevet 17. mai 2006 Del Skrevet 17. mai 2006 Vanskelig å svare på dette, siden du ikke vil vise koden, kanskje du kan lage et minimalt eksempel som viser problemstillingen? Vennlig hilsen HV Lenke til kommentar
elminzter Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 (endret) Vanskelig å svare på dette, siden du ikke vil vise koden, kanskje du kan lage et minimalt eksempel som viser problemstillingen? Vennlig hilsen HV 6120052[/snapback] hm, ville ikke spamme med kode... vel...slik som det er over så fungerer det fint, men om jeg gjør det slik, vil det ikke fungere: Game klassen: (klassen i spillet med mainmetoden som kjører alt...) public class Game extends JFrame { private static Game instance; private static Gfx gfx; private Game() { (...) } public static Game getInstance() { if (instance == null) { instance = new Game(); } return instance; } public void startGame() { running = true; while (running) { if (!paused) { (...) //repaint gfx.repaint(); } try { Thread.sleep(40); } catch (Exception e) { } } } public void loadMenu() { JFrame menuframe = new JFrame("ratz!"); Menu menu = new Menu(); menuframe.add(menu); menuframe.setSize(800, 630); menuframe.setVisible(true); menuframe.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void loadGame() { JFrame frame = new JFrame("ratz!"); try { nextLevel(); } catch (NoMoreLevelsException e) { //skjer aldri, dette er første level } gfx = new Gfx(); frame.add(gfx); frame.setSize(800, 630); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); startGame(); } public static void main(String[] args) { Game game = getInstance(); game.loadMenu(); } } Menu klassen: public class Menu extends JPanel implements KeyListener { public Menu() { this.setBackground(Color.gray); this.setPreferredSize(new Dimension(800,600)); this.setFocusable(true); this.addKeyListener(this); this.requestFocus(); } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { Game.getInstance().loadGame(); } } } Gfx glassen: public class Gfx extends JPanel implements KeyListener,MouseListener { public Gfx() { this.setBackground(Color.gray); this.setPreferredSize(new Dimension(800,600)); this.setFocusable(true); this.addKeyListener(this); this.addMouseListener(this); this.requestFocus(); } } jah...er masse kode innimellom rundt om kring som jeg har utelatt...men selve funksjonaliteten skulle vel være med her.... om jeg prøver å kjøre ting slik som her så loader menuen som den skal og når jeg trykker enter så åpner den en ny frame til spillet... selve spillløkka i startGame() kjører i den nye framen, men ingenting blir tegna! si fra om det trengs mer kode, jeg utelater ting for at dere skal slippe å bla gjennom hundrevis av kodelinjer.... Endret 17. mai 2006 av elminzter Lenke til kommentar
elminzter Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 jah, tenkte jeg det ikke, nå er det så mye kode at folk bare dropper å prøve Lenke til kommentar
Patton Skrevet 17. mai 2006 Del Skrevet 17. mai 2006 Naa skummet jeg lett over, men proev denne endringen og se om det fungerer bedre: public class Menu extends JPanel implements KeyListener { public Menu() { this.setBackground(Color.gray); this.setPreferredSize(new Dimension(800,600)); this.setFocusable(true); this.addKeyListener(this); this.requestFocus(); } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { Thread gameThread = new Thread() { public void run() { Game.getInstance().loadGame(); } }; gameThread.start(); } } } Lenke til kommentar
Gravlaks Skrevet 17. mai 2006 Del Skrevet 17. mai 2006 Jeg har nøyaktig samme problem, kan nok tenke meg vi sitter med samme prosjekt . Uansett, jeg forsøker å bruke samme JFrame for spillets gui som menyen, ved å bruke JFrame-objektets removeAll(); metode, for deretter å legge til SpillGUIet. Det funker altså ikke. Min kode ligger her: http://home.no.net/ynar/files/newgamespill.rar Lenke til kommentar
elminzter Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 hehe Gravlaks, er ikke prosjekt dette...sitter her og sløser fritida mi jeg når jeg heller burde lest til eksamen ^^ (kan jo gå for øving til Java eksamen ) 2sek, skal prøve Patton, på forhånd takk Lenke til kommentar
elminzter Skrevet 17. mai 2006 Forfatter Del Skrevet 17. mai 2006 takker, funka fint Lenke til kommentar
Patton Skrevet 20. mai 2006 Del Skrevet 20. mai 2006 (endret) Grunnen til at det ikke fungerte før er at når du trykker på knappen, så kjører du hele rutinen i javas "grafikk thread" (event-dispatching). Alle events som startes av knapper, menyer osv. må ikke invovlere lange, tunge rutiner, fordi da vil alle andre events stå og vente til den er ferdig. I ditt første eksempel startes loadGame() i main-thread, i ditt andre startes loadGame() i event-thread. Les mer om Threads and Swing Endret 20. mai 2006 av Patton 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å