swing - How to move Polygon Object with KeyListener in Java -


i working on 2d game learning project , have hit bump. cannot figure out how move polygon object using keylistener within jpanel (which added jframe). i've tried frog.translate(int x, int y) method, not update location. i've tried changing array coordinates manually. sample of code below:

import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.keyevent; import java.awt.event.keylistener;  public class board extends jpanel implements keylistener {      private frog frog;      public board() {         setbackground(color.green);         addkeylistener(this);         setfocusable(true);         setfocustraversalkeysenabled(false);     }      @override     public void paintcomponent(graphics g) {         super.paintcomponent(g);         graphics2d g2 = (graphics2d)g;                  frog = new frog();             // frog graphics         g2.setcolor(color.black);         g2.drawpolygon(frog);         g2.setcolor(new color(0,150,15));         g2.fillpolygon(frog);     }      @override     public void keytyped(keyevent ke) {     }      @override     public void keypressed(keyevent ke) {         int c = ke.getkeycode();         if(c == keyevent.vk_left){             frog.movefrogleft(25);             //frog.translate(-25,0);         }          if(c == keyevent.vk_right){             frog.movefrogright(25);             //frog.translate(25,0);         }          if(c == keyevent.vk_up){             frog.movefrogup(25);             //frog.translate(0,-25);         }          if(c == keyevent.vk_down){             frog.movefrogdown(25);             //frog.translate(0,25);         }         repaint();      }       @override      public void keyreleased(keyevent ke) {      }   } 

///////////////////////

import java.awt.polygon; import java.awt.event.keyevent; import java.awt.event.keylistener;  public class frog extends polygon {      private integer[] xcoord;     private integer[] ycoord;      public frog(){          xcoord = new integer[] {5,10,10,15,15,20,             20,30,30,35,35,40,40,             45,45,40,40,30,30,40,             40,45,45,40,40,35,35,             30,30,20,20,15,15,10,             10,5,5,10,10,20,20,             10,10,5,5};          ycoord = new integer[] {10,10,5,5,20,20,             10,10,20,20,5,5,10,10,             15,15,25,25,30,30,35,35,             40,40,45,45,35,35,40,40,             35,35,45,45,40,40,35,35,             30,30,25,25,15,15,10};          for(int = 0; < xcoord.length; i++){             this.addpoint(xcoord[i],ycoord[i]);         }     }      public void movefrogleft(int x) {         if(xcoord[0] - x < 0){             //do nothing         } else {             for(int = 0; < xcoord.length; i++){                 xcoord[i] = xcoord[i] - x;             }         }     }      public void movefrogright(int x){         if(xcoord[0] + x > 600){             //do nothing         } else {             for(int = 0; < xcoord.length; i++){                 xcoord[i] = xcoord[i] + x;             }         }     }      public void movefrogup(int y){         if(ycoord[0] - y < 0){             //do nothing         } else {             for(int = 0; < ycoord.length; i++){                 ycoord[i] = ycoord[i] - y;             }         }     }      public void movefrogdown(int y){         if(ycoord[0] + y > 600){             //do nothing         } else {             for(int = 0; < ycoord.length; i++){                 ycoord[i] = ycoord[i] + y;             }         }     } } 

this code has simple issue:

@override public void paintcomponent(graphics g) {     super.paintcomponent(g);     graphics2d g2 = (graphics2d)g;              frog = new frog();// <-- !!!!!      // frog graphics     g2.setcolor(color.black);     g2.drawpolygon(frog);     g2.setcolor(new color(0,150,15));     g2.fillpolygon(frog); } 

the marked line overwrites frog new instance, every time frog painted, reseting original point. apart obvious issue reason unexpected behaviour, never unnecessary calculations in paintcomponent(...)-method. precomputation, object-generation, etc. should done outside of paintcomponent!!!


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

c++ - Clear the memory after returning a vector in a function -

erlang - Saving a digraph to mnesia is hindered because of its side-effects -