Keylisteners in games

Hey guys,
I'm trying to create a simple game using Java2D. I have a JPanel inside a JFrame, and I register the JPanel with a KeyListener. Then I implement the KeyPressed method for the left and right arrow keys, so I can move my character around.
However, when I press and hold the left arrow key for example, the character moves one space, then pauses for a little bit, then moves continuously. That is great for text editing (see how it works when you are writing some text - press and hold any key, and see how it performs a singe action, waits a moment, then repeats). But this is unacceptable in a game.
How do I stop this from happening?

Use keypressed and keyreleased an your own timer

Similar Messages

  • Please help with KeyListeners!!!!!

    Hi...
    I am trying to make the Snake game. I am working with keyListeners...I have never worked with keylisteners. So this is what I have to activate my left arrow key....
    public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    snakeLeft = theSnake.getXPosition();
    System.out.println(snakeLeft);
    if(key == KeyEvent.VK_ESCAPE ){
         System.exit(0);
    else if(key == e.VK_LEFT){
         snakeLeft -= 8;
         if(snakeLeft < 3){
         snakeLeft = 3;
         theSnakeLife.moveLeft(snakeLeft);
         redisplay();
    theSnake is an object of the Snake class (that where I have the x and y positions) System.out.println(snakeLeft)...I was trying to see if the SnakeLeft prints the xPosition...but it does not.
    Thank you...
    srj6

    By using this sample, you can control the speed of the snake, and the movement is smoother.
    import java.awt.*;
    import java.awt.event.*;
    public class Snake extends Frame
         DPanel pan = new DPanel();
    public Snake()
         super();
         setBounds(1,1,500,325);     
         addWindowListener(new WindowAdapter()
         {     public void windowClosing(WindowEvent ev)
                   dispose();     
                   System.exit(0);
         setLayout(new BorderLayout());
         add("Center",pan);
         setVisible(true);     
         Thread th = new Thread(pan);
         th.start();
         pan.requestFocus();
    public class DPanel extends Panel implements KeyListener, Runnable
         Rectangle snak = new Rectangle(10,10,70,5);
         int       mx   = 0;
         Graphics  og;
    public DPanel()
         super();
         setBackground(Color.pink);
         addKeyListener(this);
    public void run()
         while (true)
              try     
                   Thread.sleep(4);
                   if (mx < 0)
                        og.setColor(Color.pink);
                        og.fillRect(snak.x+snak.width+mx,snak.y,mx*-1,snak.height);
                   if (mx > 0)
                        og.setColor(Color.pink);
                        og.fillRect(snak.x,snak.y,mx,snak.height);
                   if (mx != 0)
                        snak.x = snak.x + mx;                    
                        og.setColor(Color.black);
                        og.fillRect(snak.x,snak.y,snak.width,snak.height);
              catch(InterruptedException ie){}
    public void paint(Graphics g)
         if (og == null) og = getGraphics();
         g.setColor(Color.black);
         g.fillRect(snak.x,snak.y,snak.width,snak.height);
    public void keyTyped(KeyEvent e){}
    public void keyPressed(KeyEvent e)
         if (e.getKeyCode() == KeyEvent.VK_RIGHT) mx = 1;
         if (e.getKeyCode() == KeyEvent.VK_LEFT)  mx = -1;
    public void keyReleased(KeyEvent e)
         if (e.getKeyCode() == KeyEvent.VK_RIGHT) mx = 0;
         if (e.getKeyCode() == KeyEvent.VK_LEFT)  mx = 0;
    public static void main (String[] args)
         new Snake();  
    }       Noah

  • KeyListener, sound problems with game

    Hi All!
    I'm new to gaming.. I've developed a game called Puyo Puyo using Swings. But its got some problems...
    My game plays well for the first time but doesn't restart.
    Im unable to implement keyListeners.. they simply dont work..
    Can someone tell me how to add sounds to my game?
    When executed, a blank window appears first, then on maximising.. evrything else comes into picture.. how do i rectify this? Please help me out at the earliest wid all ur possible and favourable hints n replies..
    Take Care ya'll!

    Hello...
    I'm trying to develope Puyo Puyo(Variation of tetris) game through Java(Java Console Application). The game is like that we have to display 4 types of smiles & if 4 Similar smilies forms the row or Column then score is increased & that row/column will be removed from Application. Still now I'm abel in generation of random smilies & moving then left/ right.
    But how can I manage to create a array of images & detect whether they forming rows/columns. Plz give me Hints.
    Thanks in Advance

  • Can I play Game Center Games with other family members sharing one Apple ID

    I have several IOS devices sharing the same Apple ID that my sons and wife use. I have set up a game center account using that ID and can find no way that we can play head to head games on those multiple devices against each other using that one Apple ID login, even if I create multiple Nicknames. Am I missing something?

    An Apple ID is just an account that uses an email address and password. It does not have to be tied to iTunes. You can create one here. Create one each for your sons and wife.

  • How to repaint a JPanel in bouncing balls game?

    I want to repaint the canvas panel in this bouncing balls game, but i do something wrong i don't know what, and the JPanel doesn't repaint?
    The first class defines a BALL as a THREAD
    If anyone knows how to correct the code please to write....
    package fuck;
    //THE FIRST CLASS
    class CollideBall extends Thread{
        int width, height;
        public static final int diameter=15;
        //coordinates and value of increment
        double x, y, xinc, yinc, coll_x, coll_y;
        boolean collide;
        Color color;
        Rectangle r;
        bold BouncingBalls balls; //A REFERENCE TO SECOND CLASS
        //the constructor
        public CollideBall(int w, int h, int x, int y, double xinc, double yinc, Color c, BouncingBalls balls) {
            width=w;
            height=h;
            this.x=x;
            this.y=y;
            this.xinc=xinc;
            this.yinc=yinc;
            this.balls=balls;
            color=c;
            r=new Rectangle(150,80,130,90);
        public double getCenterX() {return x+diameter/2;}
        public double getCenterY() {return y+diameter/2;}
        public void move() {
            if (collide) {
            x+=xinc;
            y+=yinc;
            //when the ball bumps against a boundary, it bounces off
            //bounce off the obstacle
        public void hit(CollideBall b) {
            if(!collide) {
                coll_x=b.getCenterX();
                coll_y=b.getCenterY();
                collide=true;
        public void paint(Graphics gr) {
            Graphics g = gr;
            g.setColor(color);
            //the coordinates in fillOval have to be int, so we cast
            //explicitly from double to int
            g.fillOval((int)x,(int)y,diameter,diameter);
            g.setColor(Color.white);
            g.drawArc((int)x,(int)y,diameter,diameter,45,180);
            g.setColor(Color.darkGray);
            g.drawArc((int)x,(int)y,diameter,diameter,225,180);
            g.dispose(); ////////
        ///// Here is the buggy code/////
        public void run() {
            while(true) {
                try {Thread.sleep(15);} catch (Exception e) { }
                synchronized(balls)
                    move();
                    balls.repairCollisions(this);
                paint(balls.gBuffer);
                balls.canvas.repaint();
    //THE SECOND CLASS
    public class BouncingBalls extends JFrame{
        public Graphics gBuffer;
        public BufferedImage buffer;
        private Obstacle o;
        private List<CollideBall> balls=new ArrayList();
        private static final int SPEED_MIN = 0;
        private static final int SPEED_MAX = 15;
        private static final int SPEED_INIT = 3;
        private static final int INIT_X = 30;
        private static final int INIT_Y = 30;
        private JSlider slider;
        private ChangeListener listener;
        private MouseListener mlistener;
        private int speedToSet = SPEED_INIT;
        public JPanel canvas;
        private JPanel p;
        public BouncingBalls() {
            super("fuck");
            setSize(800, 600);
            p = new JPanel();
            Container contentPane = getContentPane();
            final BouncingBalls xxxx=this;
            o=new Obstacle(150,80,130,90);
            buffer=new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
            gBuffer=buffer.getGraphics();
            //JPanel canvas start
            final JPanel canvas = new JPanel() {
                final int w=getSize().width-5;
                final int h=getSize().height-5;
                @Override
                public void update(Graphics g)
                   paintComponent(g);
                @Override
                public void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    gBuffer.setColor(Color.ORANGE);
                    gBuffer.fillRect(0,0,getSize().width,getSize().height);
                    gBuffer.draw3DRect(5,5,getSize().width-10,getSize().height-10,false);
                    //paint the obstacle rectangle
                    o.paint(gBuffer);
                    g.drawImage(buffer,0,0, null);
                    //gBuffer.dispose();
            };//JPanel canvas end
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
            addButton(p, "Start", new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    CollideBall b = new CollideBall(canvas.getSize().width,canvas.getSize().height
                            ,INIT_X,INIT_Y,speedToSet,speedToSet,Color.BLUE,xxxx);
                    balls.add(b);
                    b.start();
            contentPane.add(canvas, "Center");
            contentPane.add(p, "South");
        public void addButton(Container c, String title, ActionListener a) {
            JButton b = new JButton(title);
            c.add(b);
            b.addActionListener(a);
        public boolean collide(CollideBall b1, CollideBall b2) {
            double wx=b1.getCenterX()-b2.getCenterX();
            double wy=b1.getCenterY()-b2.getCenterY();
            //we calculate the distance between the centers two
            //colliding balls (theorem of Pythagoras)
            double distance=Math.sqrt(wx*wx+wy*wy);
            if(distance<b1.diameter)
                return true;
            return false;
        synchronized void repairCollisions(CollideBall a) {
            for (CollideBall x:balls) if (x!=a && collide(x,a)) {
                x.hit(a);
                a.hit(x);
        public static void main(String[] args) {
            JFrame frame = new BouncingBalls();
            frame.setVisible(true);
    }  And when i press start button:
    Exception in thread "Thread-2" java.lang.NullPointerException
    at fuck.CollideBall.run(CollideBall.java:153)
    Exception in thread "Thread-3" java.lang.NullPointerException
    at fuck.CollideBall.run(CollideBall.java:153)
    Exception in thread "Thread-4" java.lang.NullPointerException
    at fuck.CollideBall.run(CollideBall.java:153)
    and line 153 is: balls.canvas.repaint(); in Method run() in First class.
    Please help.

    public RepaintManager manager;
    public BouncingBalls() {
            manager = new RepaintManager();
            manager.addDirtyRegion(canvas, 0, 0,canvas.getSize().width, canvas.getSize().height);
        public void run() {
            while(true) {
                try {Thread.sleep(15);} catch (Exception e) { }
                synchronized(balls)
                    move();
                    balls.repairCollisions(this);
                paint(balls.gBuffer);
                balls.manager.paintDirtyRegions(); //////// line 153
       but when push start:
    Exception in thread "Thread-2" java.lang.IllegalMonitorStateException
    at java.lang.Object.notifyAll(Native Method)
    at fuck.CollideBall.run(CollideBall.java:153)
    Exception in thread "Thread-3" java.lang.IllegalMonitorStateException
    at java.lang.Object.notifyAll(Native Method)
    at fuck.CollideBall.run(CollideBall.java:153)
    i'm newbie with Concurrency and i cant handle this exceptons.
    Is this the right way to do repaint?

  • Balls don't move in bouncing balls game.Please Help !?

    I want to repaint the canvas panel in this bouncing balls game, but i do something wrong i don't know what, and the JPanel doesn't repaint?
    The first class defines a BALL as a THREAD
    If anyone knows how to correct the code please to write....
    package ****;
    //THE FIRST CLASS
    class CollideBall extends Thread{
        int width, height;
        public static final int diameter=15;
        //coordinates and value of increment
        double x, y, xinc, yinc, coll_x, coll_y;
        boolean collide;
        Color color;
        Rectangle r;
        bold BouncingBalls balls; //A REFERENCE TO SECOND CLASS
        //the constructor
        public CollideBall(int w, int h, int x, int y, double xinc, double yinc, Color c, BouncingBalls balls) {
            width=w;
            height=h;
            this.x=x;
            this.y=y;
            this.xinc=xinc;
            this.yinc=yinc;
            this.balls=balls;
            color=c;
            r=new Rectangle(150,80,130,90);
        public double getCenterX() {return x+diameter/2;}
        public double getCenterY() {return y+diameter/2;}
        public void move() {
            if (collide) {
            x+=xinc;
            y+=yinc;
            //when the ball bumps against a boundary, it bounces off
            //bounce off the obstacle
        public void hit(CollideBall b) {
            if(!collide) {
                coll_x=b.getCenterX();
                coll_y=b.getCenterY();
                collide=true;
        public void paint(Graphics gr) {
            Graphics g = gr;
            g.setColor(color);
            //the coordinates in fillOval have to be int, so we cast
            //explicitly from double to int
            g.fillOval((int)x,(int)y,diameter,diameter);
            g.setColor(Color.white);
            g.drawArc((int)x,(int)y,diameter,diameter,45,180);
            g.setColor(Color.darkGray);
            g.drawArc((int)x,(int)y,diameter,diameter,225,180);
            g.dispose(); ////////
        ///// Here is the buggy code/////
        public void run() {
            while(true) {
                try {Thread.sleep(15);} catch (Exception e) { }
                synchronized(balls)
                    move();
                    balls.repairCollisions(this);
                paint(balls.gBuffer);
                balls.canvas.repaint();
    //THE SECOND CLASS
    public class BouncingBalls extends JFrame{
        public Graphics gBuffer;
        public BufferedImage buffer;
        private Obstacle o;
        private List<CollideBall> balls=new ArrayList();
        private static final int SPEED_MIN = 0;
        private static final int SPEED_MAX = 15;
        private static final int SPEED_INIT = 3;
        private static final int INIT_X = 30;
        private static final int INIT_Y = 30;
        private JSlider slider;
        private ChangeListener listener;
        private MouseListener mlistener;
        private int speedToSet = SPEED_INIT;
        public JPanel canvas;
        private JPanel p;
        public BouncingBalls() {
            super("****");
            setSize(800, 600);
            p = new JPanel();
            Container contentPane = getContentPane();
            final BouncingBalls xxxx=this;
            o=new Obstacle(150,80,130,90);
            buffer=new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
            gBuffer=buffer.getGraphics();
            //JPanel canvas start
            canvas = new JPanel() {
                final int w=getSize().width-5;
                final int h=getSize().height-5;
                @Override
                public void update(Graphics g)
                   paintComponent(g);
                @Override
                public void paintComponent(Graphics g) {
                    super.paintComponent(g);
                    gBuffer.setColor(Color.ORANGE);
                    gBuffer.fillRect(0,0,getSize().width,getSize().height);
                    gBuffer.draw3DRect(5,5,getSize().width-10,getSize().height-10,false);
                    //paint the obstacle rectangle
                    o.paint(gBuffer);
                    g.drawImage(buffer,0,0, null);
                    //gBuffer.dispose();
            };//JPanel canvas end
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
            addButton(p, "Start", new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    CollideBall b = new CollideBall(canvas.getSize().width,canvas.getSize().height
                            ,INIT_X,INIT_Y,speedToSet,speedToSet,Color.BLUE,xxxx);
                    balls.add(b);
                    b.start();
            contentPane.add(canvas, "Center");
            contentPane.add(p, "South");
        public void addButton(Container c, String title, ActionListener a) {
            JButton b = new JButton(title);
            c.add(b);
            b.addActionListener(a);
        public boolean collide(CollideBall b1, CollideBall b2) {
            double wx=b1.getCenterX()-b2.getCenterX();
            double wy=b1.getCenterY()-b2.getCenterY();
            //we calculate the distance between the centers two
            //colliding balls (theorem of Pythagoras)
            double distance=Math.sqrt(wx*wx+wy*wy);
            if(distance<b1.diameter)
                return true;
            return false;
        synchronized void repairCollisions(CollideBall a) {
            for (CollideBall x:balls) if (x!=a && collide(x,a)) {
                x.hit(a);
                a.hit(x);
        public static void main(String[] args) {
            JFrame frame = new BouncingBalls();
            frame.setVisible(true);
    }  This code draws only the first position of the ball:
    http://img267.imageshack.us/my.php?image=51649094by6.jpg

    I'm trying to draw everything first to a buffer:
    buffer=new BufferedImage(getSize().width, getSize().height, BufferedImage.TYPE_INT_RGB);
    gBuffer=buffer.getGraphics();
    The buffer is for one JPanel and then i want to draw this buffer every time when balls change their possitions(collide or just move).
    The logic is something like this:
    startButton -> (ball.start() and add ball to List<balls>),
    ball.start() -> ball.run() -> (move allballs, paint to buffer and show buffer)
    In the first class:
    BouncingBalls balls; //A REFERENCE TO SECOND CLASS
    In the second class:
    private List<CollideBall> balls=new ArrayList();
    the tames are the same but this isn't an error.
    Edited by: vigour on Feb 14, 2008 7:57 AM

  • Game and Ball Hit problem

    Hello everyone, I am working on a game and was wondering if I could get some help. I have a ball that bounces around in a box, and place one small ball in the applet. I want to create an effect that when the ball that is moving comes into connect with the static ball, the moving ball bounces in the opposite direction. I used this:
    if(x_pos - 100 < 2 & y_pos - 100 < 2 || 100-x_pos < 2 && 100 - y_pos < 2)
    where x_pos and y_pos are for the moving ball, and 100 is the radius of the static ball. Should I use the Pythagoras theorem to do it?
    Thank You In Advance for any help.

    Use java.awt.Shape and its contains() method. It's a standard collision detection idiom.

  • It hangs when playing games

    My system is Windows 7 - 64 bit operating system
    I've used Firefox for many many years and always praised it compared to EI. I am afraid I wont be able to praise it much more. It stinks. It hangs mostly when I am playing games or looking at pictures or videos. Its worse when on Facebook but also happens on other web site. I did all the troubleshooting, updates, remove old versions and re install, disable add ons all and all Its driving me insane. Can you solve the problem with a new versionof Firefox or do we have to flush the darn browser for good.
    Thank you

    anyone has a solution until a new version comes out?

  • When i login on game center it say enter your birth date when i enter it and i perss next the birth day will come again and again what should do

    when i login on game center it say enter your birth date when i enter it and i perss next the birth day will come again and again what should do

    Start a game with Game Center and go from there.

  • Why is it that when I login with my Game centre account, it shows the wrong country?

    My country/region is set to Singapore but whenever I login to my game centre account for games, it shows the china flag and words come out in Chinese. How can I change this?

    Do the songs have an iCloud icon?
    If so, the songs with an iCloud icon were purchased from the iTunes Store and have not been downloaded. You must select on the iCloud icon for a song to download it.

  • Problem with Preloader in my Flash AS2 Game

    I have been using this tutorial to make a preloader:
    http://www.republicofcode.com/tutori.../preloader_bc/
    I have run into one problem though.
    When I simulate the download, it just shows the background color of the game while it loads, and when it finished loading, it shows the loading screen fully loaded. I have followed the tutorial exactly, except added my file names into the AS2 code.
    Here is the ActionScript in Frame 1 I have for the preloader:
    if (_root.getBytesTotal() != _root.getBytesLoaded()){
    stopAndGoto(1);
    preloaderBar._xscale=(_root.getBytesLoaded()/_root.getBytesTotal())*100;
    loaderTxt.text=Math.round((_root.getBytesLoaded()/_root.getBytesTotal())*100)+"%";
    Any hints or answers to what i'm doing wrong?
    Thanks, MrA615.

    Your description of what you've done and the code you show does not match what the tutorial says to do and what code to use... (there is no stopAndGoTo() function in Flash).
    Right-click the second frame on the upper layer labeled Actions and select Actions. Copy and paste the code below to make our preloader functional.
    if (_root.getBytesTotal() != _root.getBytesLoaded()){
    gotoAndPlay(1);
    bar_mc._xscale=(_root.getBytesLoaded()/_root.getBytesTotal())*100;
    loader_txt.text=Math.round((_root.getBytesLoaded()/_root.getBytesTotal())*100)+"%";

  • Since I installed 7.6, my IPod (5th Gen) can't find my games

    EVERYTHING was fine until I installed 7.6. After doing so I had to restore my IPod 4 times, and now the $30 worth of games that I once had on there, cannot be found. They're in/on my computer, and they're in my ITunes Library but it says that my "games cannot be found." I found them, and they were once there on my IPod (5th generation 30GB), but not they won't sync up somehow. I tried the draggin them out of the library onto my desktop, then dragging them to the devices section to my IPod, still doesn't work.
    Has this happened to anyone else? Anyone have any suggestions?

    I am running Windows XP with a 5th generation Ipod and have had similar issues. (itunes would not sync games to ipod; Received error stating games could not be found yet they were in the Games Folder of iTunes Library.) I followed the itunes trouble shooting procedures and did not resolve my problem. I discussed this with itunes tech support for over a week and got no where.
    I have been monitoring this message board and have yet to find a solution.
    Keep us informed regarding your progress.

  • Can I move games from one iPod to a new iPod?

    Can I transfer games in progress from ipod3 to new ipod4?

    Yes.  Transfer these Apps to your iTunes library by choosing File -> Transfer Purchases and then sync them to the new iPod or simply download these same applications on your new iPod when it arrives.
    If you want to retain app data as well, you'll want to backup the old iPod and restore the new iPod from that same backup.  See this article for more assistance.
    iTunes: Backing up, updating, and restoring iOS software
    B-rock

  • How can I move a game center username from one Apple ID to another?

    I've tried to do this but it doesn't seem possible. For instance, trying to choose the username from another Apple ID you own correctly tells you that it's already in use. However, logging in with the Apple ID that has the username you want and trying to change the Apple ID tells me that the Apple ID I want to move the username to already has a username even though it doesn't because I'm at the stage of choosing a username in that other account. In this case I get the error message: "This change is not allowed because that Apple ID is already in use. You can try again using a different name or leave your Apple ID unchanged."
    I read about one potential solution to this and that is changing the username you want in the Apple ID you no longer want associated with Game Centre, thereby releasing it and then quickly try to grab it again in the Apple ID you do want it on. I'm a bit nervous about trying this though because I do like the username enough that I'd rather stay with the existing Apple ID than risk losing it.
    Has anyone tried doing this and had success? Maybe Apple blocks you from using a username for a period of time after it's been associated with an account, so I'm not sure I want to do this.
    I wish Apple would just let us consolidate Apple ID/accounts and give us more control over our accounts (including the ability to close old/redundant Apple IDs)! It's a cause of endless frustration for so many people!!!

    slenpree wrote:
    I would really really like to move it form the first apple ID to my iCloud one so I just sign into one appleID for everything.
    Many Thanks,
    Jonny
    You need more help then anyone here can give, as far as I know. Good luck.

  • I have multiple ipods on my account...how do I find out which one purchased over $250 worth of games?

    I have multiple ipods on my account (kids) and one or more of them purchased over $250 worth of games.  I need to know which child(ren) did this so they can pay accordingly.  The accout only tells what day they were purchased but doesn't say which ipod purchased.  Any help would be greatly appreciated.

    It could be:
    iTunes Store & Mac App Store: About credit-card authorization holds
    You could contact itunes support and ask.  Click Support at the top if this page, then click the link under Contact Us

Maybe you are looking for

  • IPOD Color- Corrupted- restored- black/white menu+not working (WinXP)

    I got an iPOD Color Display last year, few days ago, it started going nuts. Windows were not recognizing etc. After the restart-reboot-restore it has a Black/White GUI and still windows can not recognize it. Windows say that it is a generic USB hard

  • Urgent: sending jar files

    hii i have created an applet that uses a JTree to display employee hierarchy data..i have compiled all the necessary class file in file called Hm.jar now i have written an html page with the tag <applet code="Hmain.class" archive="classes12.jar ,Hm.j

  • Workspace error while accessing HP V11.1.1.4

    Hello, We just migrated from Version 9.3.1 to V11.1.1.4. When accessing Hyperion Planning via workpace, we get an error: 'There was communication error while loading tree data' . Has any one come across similar error while doing so? If so what was th

  • Family Sharing: Shared music not appearing

    All of our music has been purchased using my account (say: [email protected]). My wife has historically used my iTunes account for her phone. I set up family sharing on my iPad/iPhone/Mac+iTunes, and added my wife (say: [email protected]). She accept

  • Cannot access media device through USB.

    Hello I have recently upgraded to windows 7 and have had to set up Windows XP mode to work with some of our older software. Everything has gone great on the set up and the program works fine however I have a device which I use to record geographical