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.

  1. use swing timer instead of thread

    learn more how use swing timers

  2. override paintcomponent() method custom painting instead of overriding paint() method.

  3. don't forget call super.paintcomponent() in overridden method.
  4. 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

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

jsf - How to ajax update an item in the footer of a PrimeFaces dataTable? -

django - CSRF verification failed. Request aborted. CSRF cookie not set -