i'm coding game , i'm trying have if click on first button on front page, shows transition screen 5 seconds, , shows game. here code:
import java.awt.graphics; import java.awt.graphics2d; import java.awt.renderinghints; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.event.mouseevent; import java.awt.event.mouselistener; import java.awt.image.bufferedimage; import java.io.file; import javax.imageio.imageio; import javax.swing.jframe; import javax.swing.jpanel; public class forgottenmain extends jpanel implements keylistener,mouselistener{ /** * */ private static final int timer_delay = 35; private static final long serialversionuid = -4926251405849574401l; public static bufferedimage attic,flashlight,player,killer,frontpage,transition; public static boolean onfrontpage,up,down,left,right,inattic,ontransition; public static int px,py,kx,ky; public static thread th1,th2; public static jframe frame = new jframe("forgotten"); public static void main(string[] args){ onfrontpage = true; px = 600; py = 400; forgottenmain fm = new forgottenmain(); frame.add(fm); frame.setsize(1200,800); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlocationrelativeto(null); frame.setresizable(false); frame.setvisible(true); frame.add(new forgottenmain()); fm.repaint(); } public forgottenmain(){ init(); } public void init(){ setsize(1200,800); setvisible(true); frame.addkeylistener(this); frame.addmouselistener(this); try{ player = imageio.read(new file("char.png")); flashlight = imageio.read(new file("flashlightimage.png")); attic = imageio.read(new file("attic.png")); killer = imageio.read(new file("killer.png")); frontpage = imageio.read(new file("frontpageoutline.png")); transition = imageio.read(new file("transitionoutline.png")); } catch (exception e){ e.printstacktrace(); } // gameloop new javax.swing.timer(timer_delay, new actionlistener() { public void actionperformed(actionevent e) { gameloop(); } }).start(); } @override public void paintcomponent(graphics g){ super.paintcomponent(g); graphics2d g2 = (graphics2d) g; int fx = px - 1033; int fy = py - 635; kx = 500; ky = 500; // removes flickering of images g2.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on); // resets screen make sure shows character once g2.clearrect(0, 0, 1200, 800); // draws background attic if(inattic == true){ system.out.println("drawing attic"); g2.drawimage(attic,0,0,this); } if(onfrontpage == true){ g2.drawimage(frontpage, 0, 0, this); } // draws player if(onfrontpage == false && ontransition == false){ g2.drawimage(player, px, py, this); // draws serial killer g2.drawimage(killer, kx, ky, this); // draws flashlight g2.drawimage(flashlight, fx, fy, this); } if(ontransition == true){ g2.drawimage(transition, 0, 0, this); system.out.println("drawing transition"); try { system.out.println("sleeping 5 seconds"); thread.sleep(5000); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } system.out.println("done sleeping."); ontransition = false; inattic = true; } system.out.println(px + " " + py); } public void gameloop(){ } @override public void mouseclicked(mouseevent arg0) { system.out.println("mouselocation: " + arg0.getx() + ", " + arg0.gety()); } @override public void mouseentered(mouseevent arg0) { } @override public void mouseexited(mouseevent arg0) { } @override public void mousepressed(mouseevent e) { if(e.getx() > 499 && e.gety() > 343 && e.getx() < 748 && e.gety() < 391){ onfrontpage = false; ontransition = true; repaint(); } } @override public void mousereleased(mouseevent arg0) { }
my problem is, in paint method, in if statement testing if ontransition equal true, it's supposed draw image transition, wait 5 seconds, , draw game.
however, right it's waiting 5 seconds, drawing transition screen , game. reason out of order.
how can fix this? have tried alternate methods of waiting 5 seconds, example using currenttimemillis();, have same outcome.
you have serious problems:
- you add panels twice
- you have circuitous use of frame etc
beyond following work: have realize don't have control of painting process. therefore should launch new thread count sleep , let paint work uninhibited.
(also have removed static - if want them can try put them in - if doesnt work throw them out)
class f extends jpanel implements mouselistener{ /** * */ private static final int timer_delay = 35; private static final long serialversionuid = -4926251405849574401l; public bufferedimage attic,flashlight,player,killer,frontpage,transition; public boolean onfrontpage,up,down,left,right,inattic,ontransition; public int px,py,kx,ky; public static thread th1,th2; public jframe frame = new jframe("forgotten"); public f(){ init(); } public void init(){ setsize(1200,800); setvisible(true); onfrontpage = true; px = 600; py = 400; frame.add(this); frame.setsize(1200,800); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setlocationrelativeto(null); frame.setresizable(false); frame.setvisible(true); frame.addmouselistener(this); try{ // player = imageio.read(new file("char.png")); // flashlight = imageio.read(new file("flashlightimage.png")); // attic = imageio.read(new file("attic.png")); // killer = imageio.read(new file("killer.png")); attic = imageio.read(new file(...)); frontpage = imageio.read(new file(...)); transition = imageio.read(new file(...)); } catch (exception e){ e.printstacktrace(); } } @override public void paintcomponent(graphics g){ super.paintcomponent(g); graphics2d g2 = (graphics2d) g; int fx = px - 1033; int fy = py - 635; kx = 500; ky = 500; // removes flickering of images g2.setrenderinghint(renderinghints.key_antialiasing, renderinghints.value_antialias_on); // resets screen make sure shows character once g2.clearrect(0, 0, 1200, 800); // draws background attic if(inattic == true){ system.out.println("drawing attic"+system.currenttimemillis()); g2.drawimage(attic,0,0,this); } if(onfrontpage == true){ g2.drawimage(frontpage, 0, 0, this); } // draws player if(onfrontpage == false && ontransition == false){ g2.drawimage(player, px, py, this); // draws serial killer g2.drawimage(killer, kx, ky, this); // draws flashlight g2.drawimage(flashlight, fx, fy, this); } if(ontransition == true){ graphics gt=transition.getgraphics(); gt.setcolor(color.red); gt.drawstring("xxx"+system.currenttimemillis(), 10, 100); g2.drawimage(transition, 0, 0, this); ontransition = false; inattic = true; } system.out.println(px + " " + py); } public void gameloop(){ } @override public void mouseclicked(mouseevent arg0) { system.out.println("mouselocation: " + arg0.getx() + ", " + arg0.gety()); } @override public void mouseentered(mouseevent arg0) { } @override public void mouseexited(mouseevent arg0) { } @override public void mousepressed(mouseevent e) { onfrontpage = false; ontransition = true; thread th=new thread() { public void run() { repaint(); system.out.println("drawing transition"+system.currenttimemillis()); try { system.out.println("sleeping 5 seconds"+system.currenttimemillis()); thread.sleep(5000); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } system.out.println("done sleeping."+system.currenttimemillis()); repaint(); } }; th.start(); } @override public void mousereleased(mouseevent arg0) { } }
Comments
Post a Comment