swing - Java intersects method not working Properly -
could please tell me why code not work properly?
i trying make colour change when move on not working.
i'm using intersects method.
package com.dilkiel.game; import java.awt.color; import java.awt.dimension; import java.awt.graphics; import java.awt.image; import java.awt.rectangle; import javax.swing.imageicon; import javax.swing.jpanel; public class screen extends jpanel implements runnable { private static final long serialversionuid = 1l; private thread thread; public int tickcount = 0; public boolean running = false; public int xplayeroffset = 100; public int yplayeroffset = 100; public int width = 1280; public int height = 720; public inputhandler input = new inputhandler(this); public screen() { setfocusable(true); setmaximumsize(new dimension(width, height)); setminimumsize(new dimension(width, height)); setpreferredsize(new dimension(width, height)); start(); } public void tick() { tickcount++; if (input.up.ispressed()) { yplayeroffset -= 5; } if (input.down.ispressed()) { yplayeroffset += 5; } if (input.left.ispressed()) { xplayeroffset -= 5; } if (input.right.ispressed()) { xplayeroffset += 5; } } public synchronized void start() { running = true; thread = new thread(this, "game loop"); thread.start(); } public synchronized void stop() { running = false; try { thread.join(); } catch (interruptedexception e) { e.printstacktrace(); } } image frontview = new imageicon("res/frontview.png").getimage(); rectangle player = new rectangle(xplayeroffset, yplayeroffset + 40, 40, 40); rectangle box = new rectangle(250, 250, 80, 80); public void paint(graphics g) { g.setcolor(color.cyan); g.fillrect(0, 0, width, height); g.drawimage(frontview, xplayeroffset, yplayeroffset, this); g.setcolor(color.black); if (player.intersects(box)) { //i want work can please show me how. g.setcolor(color.green); } g.fillrect(xplayeroffset, yplayeroffset + 40, 40, 40); g.fillrect(250, 250, 80, 80); g.dispose(); } public void run() { long lasttime = system.nanotime(); double nspertick = 1000000000d / 60d; int ticks = 0; int frames = 0; long lasttimer = system.currenttimemillis(); double delta = 0; while (running) { long = system.nanotime(); delta += (now - lasttime) / nspertick; lasttime = now; boolean shouldrender = false; while (delta >= 1) { ticks++; tick(); delta -= 1; shouldrender = true; } /* * try { thread.sleep(2); } catch (interruptedexception e) { * e.printstacktrace(); } */ if (shouldrender) { frames++; repaint(); } if (system.currenttimemillis() - lasttimer >= 1000) { lasttimer += 1000; system.out.println(ticks + ", " + frames); frames = 0; ticks = 0; } } } }
i addressed points might you.
use swing timer instead of
threadlearn more how use swing timers
override
paintcomponent()method custom painting instead of overridingpaint()method.- don't forget call
super.paintcomponent()in overridden method. override jcomponent#getpreferredsize() instead of using
setpreferredsize()learn more should avoid use of set(preferred|maximum|minimum)size methods in java swing?
sample code: (custom painting in jpanel)
final jpanel panel = new jpanel(){ @override public void paintcomponent(graphics g){ super.paintcomponent(g); // custom painting code here } @override public dimension getpreferredsize() { return new dimension(..., ...); } }; sample code: (swing timer)
// wait 1 second timer timer = new timer(1000, new actionlistener() { @override public void actionperformed(actionevent arg0) { // next call } }); timer.setrepeats(false); timer.start()
Comments
Post a Comment