Firing bullets in space invaders game

hey guys,
I am trying to work out the logic and the code required for firing a bullet in a space invaders style game.
I have a space ship on a stage that moves around freely using the arrow keys and I want to use the space bar to release a bullet.
So far my thinking is as follows:
when the space bar is pressed a bullet is released from the players space ship.
so I need to think about:
- the speed of the bullet
- the position of the spaceship when the bullet is fired
- being able to fire multiple bullets one after the other
- the bullet should move from the bottom of the screen to the top of the screen
- the consequence of a bullet hitting a target
I do not know how many scripts I would need to tackle this? how many behaviours per script and more importantly the code required....
I am desperate for any help and support you can provide...
thank you

thank you for your support
at this current time it would be a waste of time to understand how things work that did not benefit my game, sure knowledge would give me power but at the moment Id rather concentrate on gaining the appropriate knowledge as per the mechanics of my game and not going off in the opposite direction
having had a look at your space invaders game and the code and logic you provided it is different to the game I am building because:
- you use the move for movement and fire whereas I use cursor keys and a space bar
- you have limited the amount of ammuntion, I have not
- there are no explosions or changing of cast members on intersection.
I understand the aim of you posting the guide however I am of the thinking it would be better to follow a tutorial that is in line with what I require rather then learning a particular style and then again having to work out how to amend it again to be used in my game...
So if anyone can help me understand or provide code as per my initial message , I would be so grateful
thank you

Similar Messages

  • How do i remove an Object (aliens/ bullets) from my Space Invaders game??

    Creating Space Invaders game and im getting confused on removing objects from my game. How do you actually remove an object (i.e bullets and aliens).
    I know this isnt the right way to do it, but for the bullets i had an array of the Objects bullets[] and set the x and y coordinates off screen so u cant see then wen they are painted you cant see them, then wen the player fires them, the x and y coordinates change so they come from the players ship till it hits an alien or goes off screen, then i reset the coordinates so they are pasted off screen again. Im relatively new to this so i would appreciate any help. Im going to have to do the same with aliens wen a collision is detected. Is there a way of actually removing an object?
    Here is sum code incase you need to see it:
    public void checkCollision()
              Rectangle playerRec = new Rectangle(player1.getBoundingBox());
              for(int i=0; i<alienRow; i++)
                   for(int j=0; j<alienCol; j++){
                        if(playerRec.intersects(aliens[i][j].getBoundingBox()))
                             collisionDetected();
                        for(int k=0; k<bulletNum; k++){
                             Rectangle bulletRec = new Rectangle(bullets[k].getBoundingBox());
                             if(bulletRec.intersects(aliens[i][j].getBoundingBox()))
                                  removeBullet(bullets[k]);
                                  collisionDetected();
         public static void collisionDetected()
              System.out.println("COLLISION");
    private void removeBullet(Bullets bullet){
              bullet.fired=false;
              bullet.setX(-10);
              bullet.setY(-10);
         }Edited by: deathwings on Nov 25, 2009 8:20 AM

    deathwings wrote:
    I was thinking bout that arraylist angle before, but it makes sense now so i think that will work ok. Thx kevin.Not a problem.
    Taking the List idea one step further, you could have a parent Object/Interface that all of your game objects extend/implement. Let's call it GameObject.
    A GameObject would have a draw(Graphics g) function that you call from your paintComponent( ) method, and for example an act( ) function as well.
    You'd have a single List of GameObjects that you add everything in your game into. Now painting is simply a matter of looping over a single List. And in your game logic loop, you could do a similar thing with the act( ) function: your bullet's act( ) would simply move it forward and check for collisions and going off screen. An alien's act( ) function would move it around and maybe shoot a weapon every so often.
    Just an idea.

  • Need Help with Java Space Invaders Game!

    Hi, im new to these forums so forgive if i dont follow the right way on laying things out. Im trying to create space invaders game but im stuck when im trying to create multiple aliens/ invaders. I have a class called Aliens (which is the invaders), and i can create an instance of an Alien. But when I try to create multiple instances they are not showing up on screen. I am not getting any error message though (which im hoping is a good sign, lol).
    GamePanel is where all the action is and Alien is the alien (invaders) class.
    Here is the code:
    import java.awt.; import javax.swing.; import java.awt.Image; import java.awt.event.KeyListener; import java.awt.event.KeyEvent;
    public class GamePanel extends JComponent implements KeyListener { SpaceInvaders game; static Player player1; Aliens alien1; static public Image spaceship2R; static public Image spaceship2L;
    public GamePanel(SpaceInvaders game)
         this.game = game;
         player1 = new Player(this);
         player1.start();
                   ///// trying to create multiple instances of aliens here
         for(int i=0; i<4; i++)
              alien1 = new Aliens(this);
              alien1.setX(i*100);
              alien1.start();
        this.setFocusable(true);
        this.addKeyListener(this);
    public void paintComponent(Graphics g)
         Image pic1 = player1.getImage();
         Image pic2 = alien1.getImage();
         super.paintComponent(g);
         g.drawImage(pic1, player1.getX(), player1.getY(), 50, 50,this);
         g.drawImage(pic2, alien1.getX(), alien1.getY(), 50, 50,this);
    }//end class
    import java.awt.Image; import java.awt.*;
    class Aliens extends Thread { //variables GamePanel parent; private boolean isRunning; private int xPos = 0, yPos = 0; Thread thread; static char direction = 'r'; Aliens alien; static public Image alien1; static public Image alien2;
    public Aliens(GamePanel parent)
         this.parent = parent;
         isRunning = true;
    public void run()
         while(isRunning)
              Toolkit kit = Toolkit.getDefaultToolkit();
              alien1 = kit.getImage("alien1.gif");
              alien2 = kit.getImage("alien2.gif");
              try
                      thread.sleep(100);
                 catch(InterruptedException e)
                      System.err.println(e);
                 updateAliens();
                 parent.repaint();
    public static Image getImage()
         Image alienImage = alien1;
        switch(direction){
             case('l'):
                  alienImage = alien1;
                  break;
             case('r'):
                  alienImage = alien1;
                  break;
        return alienImage;     
    public void updateAliens()
         if(direction=='r')
              xPos+=20;
              if(xPos >= SpaceInvaders.WIDTH-50||xPos < 0)
                   yPos+=50;
                   xPos-=20;
                   direction='l';
         else
              xPos-=20;
              if(xPos >= SpaceInvaders.WIDTH-50||xPos < 0)
                   yPos+=50;
                   xPos+=20;
                   direction='r';
    public void setDirection(char c){ direction = c; }
    public void setX(int x){ xPos = x; }
    public void setY(int y){ yPos = y; }
    public int getX(){ return xPos; }
    public int getY(){ return yPos; }
    }//end classEdited by: deathwings on Oct 19, 2009 9:47 AM
    Edited by: deathwings on Oct 19, 2009 9:53 AM

    Maybe the array I have created is not being used in the paint method, or Im working with 2 different objects as you put it? Sorry, Im just learning and I appreciate your time and help. Here is my GamePanel Class and my Aliens class:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.Image;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import java.awt.image.BufferStrategy;
    public class GamePanel extends JComponent implements KeyListener
         SpaceInvaders game;
         static Player player1;
         static Bullets bullet;
         //static public Image spaceship2R;
         //static public Image spaceship2L;
         private BufferStrategy strategy;
         static int alienNum =0;
         static Aliens[] aliens;
         public GamePanel(SpaceInvaders game)
              this.game = game;
              player1 = new Player(this);
              player1.start();
              Aliens[] aliens = new Aliens[10];
              for(int i=0; i<4; i++)
                   aliens[i] = new Aliens(this);
                   aliens.setX(i*100);
                   aliens[i].start();
                   alienNum++;
              initialiseGame();
              this.setFocusable(true);
    this.addKeyListener(this);
         public void paintComponent(Graphics g)
              Image pic1 = player1.getImage();
              Image pic2 = aliens[0].getImage();
              Image bulletPic = bullet.getImage();
              super.paintComponent(g);
              g.drawImage(pic1, player1.getX(), player1.getY(), 50, 50,this);
              for ( int i = 0; i < alienNum; i++ )
                   g.drawImage(pic1, aliens[0].getX(), aliens[0].getY(), 50, 50,this);
              //if (bullet.fired==true){
              //     g.drawImage(bulletPic, bullet.getX(), bullet.getY(), 20, 20,this);
         public void keyPressed(KeyEvent k)
              switch (k.getKeyCode()) {
              case (KeyEvent.VK_KP_DOWN):
              case (KeyEvent.VK_DOWN):
                   player1.setDirection('d');
                   break;
              case (KeyEvent.VK_KP_UP):
              case (KeyEvent.VK_UP):
                   player1.setDirection('u');
              break;
              case (KeyEvent.VK_KP_RIGHT):
              case (KeyEvent.VK_RIGHT):
                   player1.setDirection('r');
              break;
              case (KeyEvent.VK_KP_LEFT):
              case (KeyEvent.VK_LEFT):
                   player1.setDirection('l');
              break;
              case (KeyEvent.VK_SPACE):
                   fireBullet();
              break;
         public void keyTyped(KeyEvent k) {}//empty
         public void keyReleased(KeyEvent k)
              player1.setDirection('n');
         public void initialiseGame()
         public static void checkCollision()
              Rectangle playerRec = new Rectangle(player1.getBoundingBox());
              for(int i=0; i<alienNum; i++)
                   //if(playerRec.intersects(aliens[i].getBoundingBox()))
                        //collisionDetected();
         public static void collisionDetected()
              System.out.println("COLLISION");
         public void fireBullet()
              Bullets bullet = new Bullets(player1.getX(),player1.getY());
              bullet.fired=true;
    }//end GamePanelimport java.awt.Image;
    import java.awt.*;
    class Aliens extends Thread
         //variables
         GamePanel parent;
         private boolean isRunning;
         private int xPos = 0, yPos = 0;
         Thread thread;
         static char direction = 'r';
         Aliens alien;
         static public Image alien1;
         static public Image alien2;
         public Aliens(GamePanel parent)
              this.parent = parent;
              isRunning = true;
         public void run()
              while(isRunning)
                   Toolkit kit = Toolkit.getDefaultToolkit();
                   alien1 = kit.getImage("alien1.gif");
                   //alien2 = kit.getImage("alien2.gif");
                   try
              thread.sleep(100);
         catch(InterruptedException e)
              System.err.println(e);
              updateAliens();
              parent.repaint();
         public static Image getImage()
              Image alienImage = alien1;
         switch(direction){
              case('l'):
                   alienImage = alien1;
                   break;
              case('r'):
                   alienImage = alien1;
                   break;
         return alienImage;     
         public void updateAliens()
              if(direction=='r')
                   xPos+=20;
                   if(xPos >= SpaceInvaders.WIDTH-50||xPos < 0)
                        yPos+=50;
                        xPos-=20;
                        direction='l';
              else
                   xPos-=20;
                   if(xPos >= SpaceInvaders.WIDTH-50||xPos < 0)
                        yPos+=50;
                        xPos+=20;
                        direction='r';
         public Rectangle getBoundingBox()
              return new Rectangle((int)xPos, (int)yPos, 50, 50);
         public void setDirection(char c){ direction = c; }
         public void setX(int x){ xPos = x; }
         public void setY(int y){ yPos = y; }
         public int getX(){ return xPos; }
         public int getY(){ return yPos; }
    }//end class                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • Help with KeyDown (space invaders game)

    I'm making a space invaders type game for school using Greenfoot (new Java IDE). Whenever I press space, a bullet will fire. However, multiple bullets are being created when I press space once, and when I hold space, a long stream of bullets are being made. I want one bullet to be created when I press space. Tried using KeyPress, but apparently Greenfoot does not recognize java.awt? Thanks in advance.
    public class Ship extends Vehicle {
         * Constructor for objects of class Shuttle
        public Bullet B;
        boolean canFire = false;
        public Ship() {
            GreenfootImage ship = new GreenfootImage("spaceship.gif");
            this.setImage(ship);       
        //Create a bullet
        public void fire(){
            B = new Bullet();
            getWorld().addObject(B,getX(),getY()-60);
        public boolean collision(){
            Actor enemy = getOneIntersectingObject(null);
            return (enemy!=null) ? true : false;
        public void act(){
            // move with keys
            if (this.canMove())
                 move();      
            if(Greenfoot.isKeyDown("space")){               
                    fire();               
            else if(collision()){
                getWorld().removeObject(this);                           
    }

    Make a Class Variable to use as a flag indicating that a key was pressed... check to see if the flag is set, and if it is not, then fire a bullet and then set the flag. Reset the flag when they keyReleased action fires.
    This way only one bullet can be fired for each time a key is pressed, provided your act() is being polled, but if a keyPressed fires act(), but not a keyRelease too, then it will not work. If it does not work, then you'll need to go to a regular KeyListener.
    //Your code make these changes
    public class Ship extends Vehicle {
          * Constructor for objects of class Shuttle
         public Bullet B;
         boolean canFire = false;
         public Ship() {
             GreenfootImage ship = new GreenfootImage("spaceship.gif");
             this.setImage(ship);       
         //Create a bullet
         public void fire(){
             B = new Bullet();
             getWorld().addObject(B,getX(),getY()-60);
         public boolean collision(){
             Actor enemy = getOneIntersectingObject(null);
             return (enemy!=null) ? true : false;
         public void act(){
             // move with keys
             if (this.canMove())
                  move();      
            if(!GreenFoot.isKeyDown("space")) canFire = true; //add this
             if(Greenfoot.isKeyDown("space") and canFire){               
                     fire();              
                     canFire = false; //add this
             else if(collision()){
                 getWorld().removeObject(this);                           
    }

  • Controlling fire in Space Invaders game

    Hi again,
    still working through the tutorial on Space Invaders in Flash
    MX 2004 (bit out of date, I know).
    I've got the player craft under mouse control. What I don't
    like about the game is that you can fire as rapidly as you wan't,
    though the number of bullets is limited. You can change this limit
    in the variable - I would rather have it though that you can only
    have a set number of bullets in play at a time (at the moment, if
    you go over the limit, the uppermost bullets just disapear).
    Here is the code:
    // when the mouse cliks
    onClipEvent(mouseDown)
    // duplicate the bullet mc
    _root.bullet.duplicateMovieClip("bullet"+bulletNum,bulletNum);
    // set the coords to the mouse clik
    eval("_root.bullet" + bulletNum)._x = this._x;
    eval("_root.bullet" + bulletNum)._y = this._y;
    // increment the bullet number
    bulletNum++;
    // if more than 50 bullets , start again at 0
    if(bulletNum>50)
    bulletNum = 0;
    What code could I use to have it so that you can only have,
    say, 3 bullets in play at once, and you can't fire again until
    they've hit / left the screen?
    regards,
    g

    Hi again,
    thanks for that. Another way would be to use code like the
    following:
    var enableInterval:Number;
    var allowFire:Boolean;
    function tempDisableFire():Void {
    allowFire = false;
    enableInterval = setInterval(enableFire, 500); // 500
    millisecond delay
    function enableFire():Void {
    allowFire = true;
    clearInterval(enableInterval);
    I am unsure though whether to insert this within my existing
    code, or to use this starting from scratch. If it was inside an
    onClipEvent tag (the event being the mouse click), I could then use
    it to control the fire. I'm not sure if I would do this with an "if
    / then" statement.
    Any suggestions on this method? I know it may be asking a bit
    much, but if you could even complete this piece of code that would
    be magic!
    cheers,
    g

  • Yet another Space Invaders game...

    Yes, here is my first Java game:
    www.fnfconsulting.no
    Feel free to check it out. No registration necessary.
    Comments&Questions are welcome.
    Hal

    haha coded only using your right hand. nice . this
    kicks your games to mars and back malo ;) 1 word
    SOUND! and good sound :P good stuff although it doesnt
    use 1.1 so your audience is limited (its like
    developing for linux .. very limited) most people (i
    know) wont bother downloading the plug in. very nice
    thoughThanks. I dont think I understand all your comments, but I'll give it a try.
    Firstly, the game has sound, and personally I think it's the coolest part of the game. The sounds are samples from the movies. I use standard AudioClip, no fancy stuff.
    When you mention 1.1, do you mean JVM 1.1, the old stuff that was released with IE 5.0 or something? I think nowadays most people that develop Java games uses "Java 2" which as I understand it is Java SDK 1.2 and up. And most people playing Java games downloads some kind of JRE, often the newest version, 1.4.2.X.
    Correct me if I'm wrong :)

  • Help! trying to create 'space invaders'

    hi. im a high school student with a little knowledge of java. im am currently working on a class assignment where each student has to create their own program. i decided to create the classic game of 'Space Invaders'. But i have a problem; i can't figure out how i will get the characters to move.
    does anyone if there is a method that will allow the user to move a character? for example, in C++ there is a conio.h library that has a goto(x,y) function. is there one for java as well? thanks alot!

    This is another way
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    public class Si extends JFrame
         Timer  ta;
         myView view = new myView();
    public Si() 
         setBounds(3,10,765,350);
         addWindowListener(new WindowAdapter()
         {     public void windowClosing(WindowEvent ev)
              {     dispose();
                   System.exit(0);
         getContentPane().add("Center",view);
         setVisible(true);
         ta = new Timer(45, new ActionListener()
         {     public void actionPerformed(ActionEvent e)
                   view.move();
         ta.start();
    public class myView extends JComponent 
         Point invs[]   = new Point[15];
         Color invc[]   = new Color[15];
         Color  color[] = new Color[]{
                        Color.blue,   Color.cyan, Color.green, Color.magenta,
                    Color.orange, Color.pink, Color.red,   Color.yellow};
    public myView()
         for (int p=0; p < invs.length; p++)
              int x = (int)(Math.random()*600)+33;
              int y = (int)(Math.random()*200)+33;
              invs[p] = new Point(x,y);
              int c = (int)(Math.random()*8);
               invc[p] = color[c];
    public void move()
         for (int p=0; p < invs.length; p++)
              repaint(invs[p].x-1,invs[p].y-1,20,18);
              int x = (int)(Math.random()*3)-1;
              int y = (int)(Math.random()*3)-1;
              invs[p].translate(x,y);
              repaint(invs[p].x-1,invs[p].y-1,20,18);
    public void paintComponent(Graphics g)
         super.paintComponent(g);
         Graphics2D g2 = (Graphics2D)g;
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);          
         for (int p=0; p < invs.length; p++)
              g.setColor(invc[p]);
              g.fillOval(invs[p].x,invs[p].y,17,13);
    public static void main (String[] args) 
         new Si();
    }      Noah

  • [FLMX] ayuda con tutorial space invaders

    Hola a todos.
    estoy tratando de hacer una modificación de un FLA del
    space invaders
    que me bajé en:
    http://www.flashkit.com/movies/Games/Full_Game_Source/Space_In-Paul_Nea-8765/index.php
    Este jueguecillo incluye un PHP que guarda los records en
    unos txt.
    La cuestión es que no tengo mucha idea de
    programación y no me funcionan
    los records.
    ¿alguien podria ayudarme?
    gracias mil
    Juan

  • Space invaders! I need some help...!

    Hello,
    i'm trying to program a very simple version of space invaders. I'm drawing my moving objects (spaceship, rockets, aliens) with drawstring but I'm getting these compiling error: illegal start of expression.
    Also I want to move the spaceship with translate is this OK to do so!?
    Can somebody help me? Thanks for your help!
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Graphics2D;
    //in deze klasse teken ik het ruimteschip en kan het links/rechts bewegen
    public class Ruimteschip
         //ruimteschip
         Ruimteschip roderikschip = new Ruimteschip();
         public void paint(Graphics ruimteschip)
    {      //Ruimteschip weergeven
         Graphics2D ruimteschip2D = (Graphics2D)ruimteschip;
    String ruimteschip = "ruimteschip";
    ruimteschip2D.drawString("ruimteschip", x, y,);
         //beweegmethod
         public void beweegRechts()
         {     //teken opnieuw 1 coordinaat rechts
              roderikschip.translate(1, 0);
              ruimteschip2D.drawString("ruimteschip", x, y);
    //beweegmethod
         public void beweegLinks()
         {     //teken opnieuw 1 coordinaat links
              roderikschip.translate(-1, 0);
              ruimteschip2D.drawString("ruimteschip", x, y);
    }

    Hi and thanks for your replies.
    I know drawString isn't the most beautiful way, but I'm making this game for an assignment, and I have to use drawString.
    Still i'm getting "illegal start of expression" in my paint method...
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Graphics2D;
    //in deze klasse teken ik het ruimteschip en kan het links/rechts bewegen
    public class Ruimteschip
         //ruimteschip
            Ruimteschip ruimteschip = new Ruimteschip();
         public void paint(Graphics ruimteschip)
        {      //Ruimteschip weergeven
             Graphics2D ruimteschip2D = (Graphics2D)ruimteschip;
            String s = "ruimteschip";
            *ruimteschip2D.drawString(s, x, y,);*
         //beweegmethod
         public void beweegRechts()
         {     //teken opnieuw 1 coordinaat rechts
              s.translate(1, 0);
              ruimteschip.drawString(s, x, y);
        //beweegmethod
         public void beweegLinks()
         {     //teken opnieuw 1 coordinaat links
              s.translate(-1, 0);
              ruimteschip.drawString(s, x, y);
    } Edited by: Roddy on May 1, 2008 8:28 AM

  • Space Invaders.

    Hi, could you please try my game Space Invaders, to see if you can find any bugs etc? Let me know...
    http://www.geocities.com/ajbasic/SpaceInvaders.html

    the ability to die should definitely be the last thing you code ;) It's so cool to play an early staged game without ever being able to die.
    OK, so my comments:
    The pictures, if you're going to allow them to overlap, as you do now, give them some transparency.
    Also, right now, the ships will go all the way to the bottom and through the bottom of the screen.... that's bad.
    Anything else I'd think would be immediately obvious. Keep going with it and I hope to see some origional twists that you come up with

  • Making my enemies drop bombs in space invaders

    Hi all,
    I'm in the process of learning flash just now and am
    completing an online tutorial on Space Invaders. Thing is, the
    bombs drop from a random location on the screen. I want them to
    drop from a random enemy (I'm not too bothered just now about
    making it one on the bottom row or one with no other enemies before
    them).
    At the moment, here is the AS that makes them drop (the
    frequency is determined elsewhere):
    eval("_root.alienBomb" + alienBombNum)._x =random(700);
    eval("_root.alienBomb" + alienBombNum)._y =
    300*Math.random();
    An I can modify it to get a certain one to drop:
    eval("_root.alienBomb" + alienBombNum)._x
    =_root.alienClip2_2._x;
    eval("_root.alienBomb" + alienBombNum)._y =
    _root.alienClip2_2._y;
    I can' t get it to randomly choose one - I know I have to use
    the random function, but don't know how to implement this.
    Can anyone help?
    regards,
    g

    The code you're using is really old...back to Flash 5, I'd
    guess, which makes this rather more complicated than it need be.
    Since you seem to be in AS1, I'll keep it that way. Try
    using:
    xGridNum = Math.round(Math.random() * 7);
    yGridNum = Math.round(Math.random() * 7);
    var bomb = _root["alienBomb"+alienBombNum];
    var alien = _root["alien"+xGridNum+"_"+yGridNum];
    bomb._x = alien._x;
    bomb._y = alien._y;
    The above isn't the best way to do this, but it's simple and
    not far from what you've referenced. The sevens above assume 8 rows
    and 8 columns of aliens (numbered alien0_0 to alien7_7).
    Hope that helps.

  • Spawning multiple instances of a sprite (firing bullets).  Help needed.

    Hello there.  I'm currently trying to make a game in director 11.5 for a University project.  I've decided to make a scrolling space shooter but I've run into a problem.  Any tutorial I've found has created a limited 'bank' of bullets to fire, only allowing a certain number on the stage at any given time.  What I need to do is to leave a single bullet sprite off the boundaries of the page and essentially copy it and it's lingo behaviors to spawn another instance of the bullet on the stage when the player fires (using the left mouse button in this case).  I also need this copy to be deleted entirely when it collides with an enemy or leaves the boundaries of the stage, otherwise the game will just run slower and slower as more shots are fired.
    I have heard that this is possible using the puppetSprite() method but the API doesn't shine much light on the issue and neither has literally hours of google searches.  If anyone can let me know any method of doing this, I'd be very grateful.
    On a related issue, when fired the bullet will need to intsect the location of where the mouse cursor was when the bullet was fired and then continue on a linear path.  I've worked out a method of doing this but it isn't very effective or efficient (the speed of the bullets would be determined by how far away the mouse cursor is from the players ship and I think there's probably a less calculation intensive method for doing this) and as I can't spawn the bullets as of now, I really don't know if it will even work.  If anyone has any advice on how to better implement this mechanic, again I'd welcome your input.  Thanks in advance.

    You want to work with objects not numbers which means using Points for locs and Sprite references and not sprite numbers.
    I feel that using a object manager object would make programming this a lot easier, cleaner, and more efficient. Rather than give a lecture on OOP and OOD, I took some of Josh's ideas like using a timeout object and wrote some scripts in my style to give you something else to boggle your brain.
    I tested these scripts but not thoroughly and I left plenty for you to do.
    I separated out the creation and control of "bullets" from the movement of the bullets. So, there is a behavior that does nothing more than move the bullet sprites and the control object handles everything else using a single timeout object.
    I suggest creating a new project to play with these scripts. Throw a bunch of sprites on the stage and attach the "Hitable Sprite" behavior to them, make sure you have a sprite named "bullet", and a " go the frame" behavior to loop on and you should be good to go.
    Note that where I set the velocity of the bullet sprites, that I use "100.0" instead of 20.  20 would be a very fast speed.
    Here's the Parent script for the control:
    -- Bullet Control parent script
    property  pUpdateTimer  -- timeout object for doing updates
    property  pBullets  -- list of bullet sprites
    property  pGunLoc  -- location of the gun, ie the location where your bullets start at.
    property  pRightBounds  -- right edge of the stage
    property  pBottomBounds  -- bottom edge of the state
    property  pZeroRect  -- used for intersection hit detection
    on new me
      pUpdateTimer = timeout().new("BulletCntrl", 25, #update, me)  -- 25 milleseconds = 40 updates per second
      pBullets = []
      pGunLoc = point(300,550)  -- *** SET THIS to where you want your bullets to start at.
      pZeroRect = rect(0,0,0,0)
      -- store stage bounds for later use
      pRightBounds = _movie.stage.rect.width
      pBottomBounds = _movie.stage.rect.height
      return me
    end new
    on fire me
      NewBullet = script("Bullet behavior").new(pGunLoc)  -- create new bullet sprite
      if ilk(NewBullet, #sprite) then pBullets.add(NewBullet)  -- store sprite reference
    end fire
    on update me, timeob
      if pBullets.count = 0 then exit  -- no bullets to update
      -- update bullet positions
      call(#update, pBullets)
      -- get list of sprites to test for hits/collisions
      HitSprites = []
      sendAllSprites(#areHitable, HitSprites)  -- the list "HitSprites" is populated by each hitable sprite.
      BulletsToDelete = []  -- list of bullet sprites to delete
      -- check if any bullet has hit a hitable sprite
      repeat with Bullet in pBullets
        repeat with HitSprite in HitSprites
          if Bullet.rect.intersect(HitSprite.rect) <> pZeroRect then
            HitSprite.explode()
            BulletsToDelete.add(bullet)
            exit repeat  -- leave inner loop
          end if
        end repeat
      end repeat
      -- check if bullet is out of bounds
      repeat with Bullet in pBullets
        Die = false
        if Bullet.right < 0 then Die = true
        if Bullet.left > pRightBounds then Die = true
        if Bullet.top > pBottomBounds then Die = true
        if Bullet.bottom < 0 then Die = true
        if Die then BulletsToDelete.add(Bullet)
      end repeat
      -- remove any sprites that hit something or went off the screen
      repeat with Bullet in BulletsToDelete
        Bullet.die()
        pBullets.deleteOne(Bullet)  -- remove bullet from list of active bullets
      end repeat
    end update
    on stopMovie
      -- end of app cleanup
      if pUpdateTimer.objectP then
        pUpdateTimer.forget()
        pUpdateTimer = void
      end if
    end
    The behavior for the bullets is:
    -- Bullet behavior
    property  pMe
    property  pVelocity
    property  pCurLoc
    on new me, StartLoc
      -- get a sprite
      pMe = me.getSprite()
      if pMe.voidP then return void  -- if not a sprite then give up
      -- setup this bullet sprite
      pMe.puppet = true
      pMe.member = member("bullet")
      pMe.loc = StartLoc
      pMe.scriptInstanceList.add(me)  -- add this behavior to this sprite
      -- set velocity
      pVelocity = ( _mouse.mouseLoc - StartLoc) / 100.0  -- Note: magic number "20.0"
      updateStage()  -- need to update pMe.rect values
      pCurLoc = pMe.loc -- store current location
      return pMe  -- Note: returning "pMe" not "me"
    end new
    on getSprite me
      repeat with CurChannel = 1 to the lastchannel
        if sprite(CurChannel).member = (member 0 of castLib 0) AND sprite(CurChannel).puppet = false then
          return sprite(CurChannel)
        end if
      end repeat
      return void
    end getSprite
    on update me
      -- move bullet. 
      pCurLoc = pCurLoc + pVelocity  -- add velocity to pCurLoc to maintain floating point accuracy
      pMe.loc = pCurLoc 
    end update
    on die me
      pMe.scriptInstanceList = []  -- must manually clear this property
      pMe.puppet = false
    end
    We setup everything in a Movie script:
    -- Movie Script
    global gBulletCntrl
    on prepareMovie
      gBulletCntrl = script("Bullet Control").new()
      the mouseDownScript = "gBulletCntrl.fire()"  -- route mouseDown events to the global object gBulletCntrl.
    end prepareMovie
    on stopMovie
      the mouseDownScript = ""
    end stopMovie
    Finally since we are shooting at other sprites we need a script on them to interact with the bullets.
    --  Hitable Sprite Behavior
    property  pMe
    on beginSprite me
      pMe = sprite(me.spriteNum)
    end beginSprite
    on enterFrame me
      -- movie sprite
    end enterFrame
    on areHitable me, HitList
      HitList.add(pMe)
    end areHitable
    on explode me
      put "Boom"
    end explode

  • Space Shooter game help

    Im not sure if any one will be able to help me or not but Im a relatively new programmer and i am createing a space shooter type game and I am haveing some difficulties in wording my statements. Right now the way i have it set up I am able to fire only 1 shot from my ship but the shot hitting the enemy ship part works and i know it is only from this run statement i have becuase before i was able to shoot as much as i wanted. Like i said i doubt anyone will be able to help me without seeing more of my code but i thought id try.
    //createing repaint timer
    public void run(){   
    while(true) {
    try{//attempt to execute
    createEnemy(); //create enemy
    updateEnemy(); //update enemys
    n.updateShots();      //update shots
    //make the enemy explode if the shots x,y is close to the enemy x,y
    for(int i=0;i<n.size;i++){  //n = ship function and size is place holder for number of shots
         if(n.shots[i] != null && n.shots.y - enemy[i].y >0&&n.shots[i].y - enemy[i].y<50){   //if the shot is hit in this y area the shot and enemy will delete
    n.shots[i] = null;
    enemy[i] = null;
    }//end of if
         else{
              if(n.shots[i] != null &&n.shots[i].x - enemy[i].x >0&&n.shots[i].x - enemy[i].x<50){  //if the shot is hit in this x area the shot and enemy will delete
              n.shots[i] = null;     
              enemy[i] = null;
              }//end if
         }//end else
         }//end of for
         repaint();
         n.flame = false; //set flame to false so Flame is only true if Up is pressed
         Thread.sleep(100);
         }//end of try
         catch (InterruptedException e) {
    }//end of catch
    }//end of while
    } //end of run

    Why not use a timer here? If you are using Swing, then a Swing Timer is much better here than the ugly while(true).
    Also, when posting your code, please use code tags so that your code will retain its formatting and be readable. To do this, you will need to paste already formatted code into the forum, highlight this code, and then press the "code" button at the top of the forum Message editor prior to posting the message. You may want to click on the Preview tab to make sure that your code is formatted correctly. Another way is to place the tag &#91;code] at the top of your block of code and the tag &#91;/code] at the bottom, like so:
    &#91;code]
      // your code block goes here.
      // note the differences between the tag at the top vs the bottom.
    &#91;/code]

  • Java space shooter game optimization

    Hi
    I've just started a little space-arcade type of game.
    For now there's a ship but it doesn't do much:
    - moves (accelerated)
    - fires (SPACE bar)
    Now I'm going to start work on an enemy generator + collision test.
    After that: pick-ups, a status bar(remaining life, passed time and so on), etc
    Since I'm not such a experienced programmer with Java graphics, I would need any opinion I can get to optimize my code (smoother movement, less CPU/memory usage, etc.). Read about sprites but not sure if it's the case here.
    You can take a look at the game and source codes at:
    http://www.stonefixion.com/temp/game
    Please take a look over the four java files and if you have any optimization suggestions, they are mostly welcome.
    Waiting for some feedback,
    Cheers ;j

    I've done a bit of reading and I think I've already done that(double buffering) like this:
         public void update (Graphics g)
              if (dbImage == null)
                   dbImage = createImage (this.getSize().width, this.getSize().height);
                   dbg = dbImage.getGraphics ();
              dbg.setColor (getBackground ());
              dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
              dbg.setColor (getForeground());
              paint (dbg);
              g.drawImage (dbImage, 0, 0, this);
         }I put all the drawing in paint() and call it update().
    Thanx

  • Comparing coordinates for space invaders clone

    thanks a lot! The buttons now work! I have updated my code, but now my problem is to compare the position of the bullet with the position of the ufo. I have marked the part where I wrote my solution, but it doesn't really work, do you have any suggestions?
    Thanks.
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    class Animation extends JPanel implements ActionListener{
        JButton button=new JButton("links");
        JButton button2=new JButton("rechts");
        int xpos=60;
        int xpos2=0;
        int height=15;
        int width=60;
        int dx=3;
        int dxshooter=3;
        int shoot=300;
        int ykogel=0;
        int dxkogel=6;
        int number=12;
        int xposkogel;
        int yposkogel;
        int ovalx1=xpos,ovalx2=xpos+100,ovalx3=xpos+200,ovalx4=xpos+300,ovalx5=xpos+400,ovalx6=xpos+500;
        int ovaly1=15,ovaly2=15,ovaly3=15,ovaly4=15,ovaly5=15,ovaly6=15;
        int ovalxb1=xpos+19,ovalxb2=xpos+19+100,ovalxb3=xpos+19+200,ovalxb4=xpos+19+300,ovalxb5=xpos+19+400,ovalxb6=xpos+19+500;
        int ovalyb1=5,ovalyb2=5,ovalyb3=5,ovalyb4=5,ovalyb5=5,ovalyb6=5;
        Timer fastTicker;
        Animation(){
        fastTicker=new Timer(25,this);
        void start(){
                         Listener ear = new Listener();
                         this.add(button);
                         button.setSize(100,50);
                         button.move(0,320);
                         button.addActionListener(ear);
                         this.add(button2);
                         button2.setSize(100,50);
                         button2.move(600,320);
                         button2.addActionListener(ear);
            fastTicker.start();
    class Listener implements ActionListener{
      public void actionPerformed(ActionEvent b)
        Object o =b .getSource();
        if (o == button){
          if(dxshooter==3){
              dxshooter=-3;}
        if (o == button2){
        if(dxshooter==-3){
            dxshooter=3;}
       public void actionPerformed(ActionEvent e){     
       yposkogel=312-ykogel;
       ovalx1=xpos;
       ovalx2=xpos+100;
       ovalx3=xpos+200;
       ovalx4=xpos+300;
       ovalx5=xpos+400;
       ovalx6=xpos+500;
       ovalxb1=xpos+19;
       ovalxb2=xpos+19+100;
       ovalxb3=xpos+19+200;
       ovalxb4=xpos+19+300;
       ovalxb5=xpos+19+400;
       ovalxb6=xpos+19+500;   
                  //bolletjesanimatie
                   if(e.getSource()==fastTicker){
                    ykogel+=dxkogel;
                    xposkogel=xpos2;
                    xpos2+=dxshooter;
                     if(ykogel>=3){
                     xposkogel=xposkogel;}          
                    //schietding
                        if (xpos2>240){
                                dxshooter=-3;}
                        if(xpos2<-210){
                            dxshooter=3;}
                   //kogelanimatie
                       if(ykogel>310){
                       ykogel=0;}
                   //COMPARING THE POSITION OF THE BULLET WITH THE UFO's
                if(yposkogel<=15){
                        if(xposkogel>=ovalx6&&xposkogel<=ovalx6+60){
                        ovaly6=1500;
                        ovalyb6=1500;}
                        if(xposkogel>=ovalx5&&xposkogel<=ovalx5+60){
                        ovaly5=1500;
                        ovalyb5=1500;}
                        if(xposkogel>=ovalx4&&xposkogel<=ovalx4+60){
                        ovaly4=1500;
                        ovalyb4=1500;}
                        if(xposkogel>=ovalx3&&xposkogel<=ovalx3+60){
                        ovaly3=1500;
                        ovalyb3=1500;}
                        if(xposkogel>=ovalx2&&xposkogel<=ovalx2+60){
                        ovaly2=1500;
                        ovalyb2=1500;}
                        if(xposkogel>=ovalx1&&xposkogel<=ovalx1+60){
                        ovaly1=1500;
                        ovalyb1=1500;}
                     this.repaint();
    public void paintComponent(Graphics g){
                 super.paintComponent(g);
                 //ufo's
                 g.setColor(Color.black);
                 g.fillOval(ovalxb1,ovalyb1, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx1,ovaly1,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb2,ovalyb2, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx2,ovaly2,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb3,ovalyb3, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx3,ovaly3,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb4,ovalyb4, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx4,ovaly4,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb5,ovalyb5, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx5,ovaly5,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb6,ovalyb6, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx6,ovaly6,width,height);
                //schietding
                 g.fillRect(xpos2+350-17,317,6,40);
                 g.setColor(Color.green);
                 g.fillOval(xpos2+350-30,330,30,30);
                 g.setColor(Color.black);
                 g.fillRect(xpos2+350-40,350,50,height);
                //kogel
                 g.fillRect(xposkogel+350-16,yposkogel,5,5);     
                 public class AnimationDemo{
                     JFrame frame;
                     Animation animation;
                     void demo(){
                         frame=new JFrame("**Spees Inveeders** All rights reserved (Dave Senden and Joeri Oomen)");
                         animation=new Animation();
                         frame.getContentPane().add(animation);
                         frame.setSize(700,400);
                         frame.setVisible(true);
                         animation.start();
      public static void main(String[] args){
            AnimationDemo animationDemo=new AnimationDemo();
            animationDemo.demo();

    thanks a lot! The buttons now work! I have updated my code, but now my problem is to compare the position of the bullet with the position of the ufo. I have marked the part where I wrote my solution, but it doesn't really work, do you have any suggestions?
    Thanks.
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    class Animation extends JPanel implements ActionListener{
        JButton button=new JButton("links");
        JButton button2=new JButton("rechts");
        int xpos=60;
        int xpos2=0;
        int height=15;
        int width=60;
        int dx=3;
        int dxshooter=3;
        int shoot=300;
        int ykogel=0;
        int dxkogel=6;
        int number=12;
        int xposkogel;
        int yposkogel;
        int ovalx1=xpos,ovalx2=xpos+100,ovalx3=xpos+200,ovalx4=xpos+300,ovalx5=xpos+400,ovalx6=xpos+500;
        int ovaly1=15,ovaly2=15,ovaly3=15,ovaly4=15,ovaly5=15,ovaly6=15;
        int ovalxb1=xpos+19,ovalxb2=xpos+19+100,ovalxb3=xpos+19+200,ovalxb4=xpos+19+300,ovalxb5=xpos+19+400,ovalxb6=xpos+19+500;
        int ovalyb1=5,ovalyb2=5,ovalyb3=5,ovalyb4=5,ovalyb5=5,ovalyb6=5;
        Timer fastTicker;
        Animation(){
        fastTicker=new Timer(25,this);
        void start(){
                         Listener ear = new Listener();
                         this.add(button);
                         button.setSize(100,50);
                         button.move(0,320);
                         button.addActionListener(ear);
                         this.add(button2);
                         button2.setSize(100,50);
                         button2.move(600,320);
                         button2.addActionListener(ear);
            fastTicker.start();
    class Listener implements ActionListener{
      public void actionPerformed(ActionEvent b)
        Object o =b .getSource();
        if (o == button){
          if(dxshooter==3){
              dxshooter=-3;}
        if (o == button2){
        if(dxshooter==-3){
            dxshooter=3;}
       public void actionPerformed(ActionEvent e){     
       yposkogel=312-ykogel;
       ovalx1=xpos;
       ovalx2=xpos+100;
       ovalx3=xpos+200;
       ovalx4=xpos+300;
       ovalx5=xpos+400;
       ovalx6=xpos+500;
       ovalxb1=xpos+19;
       ovalxb2=xpos+19+100;
       ovalxb3=xpos+19+200;
       ovalxb4=xpos+19+300;
       ovalxb5=xpos+19+400;
       ovalxb6=xpos+19+500;   
                  //bolletjesanimatie
                   if(e.getSource()==fastTicker){
                    ykogel+=dxkogel;
                    xposkogel=xpos2;
                    xpos2+=dxshooter;
                     if(ykogel>=3){
                     xposkogel=xposkogel;}          
                    //schietding
                        if (xpos2>240){
                                dxshooter=-3;}
                        if(xpos2<-210){
                            dxshooter=3;}
                   //kogelanimatie
                       if(ykogel>310){
                       ykogel=0;}
                   //COMPARING THE POSITION OF THE BULLET WITH THE UFO's
                if(yposkogel<=15){
                        if(xposkogel>=ovalx6&&xposkogel<=ovalx6+60){
                        ovaly6=1500;
                        ovalyb6=1500;}
                        if(xposkogel>=ovalx5&&xposkogel<=ovalx5+60){
                        ovaly5=1500;
                        ovalyb5=1500;}
                        if(xposkogel>=ovalx4&&xposkogel<=ovalx4+60){
                        ovaly4=1500;
                        ovalyb4=1500;}
                        if(xposkogel>=ovalx3&&xposkogel<=ovalx3+60){
                        ovaly3=1500;
                        ovalyb3=1500;}
                        if(xposkogel>=ovalx2&&xposkogel<=ovalx2+60){
                        ovaly2=1500;
                        ovalyb2=1500;}
                        if(xposkogel>=ovalx1&&xposkogel<=ovalx1+60){
                        ovaly1=1500;
                        ovalyb1=1500;}
                     this.repaint();
    public void paintComponent(Graphics g){
                 super.paintComponent(g);
                 //ufo's
                 g.setColor(Color.black);
                 g.fillOval(ovalxb1,ovalyb1, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx1,ovaly1,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb2,ovalyb2, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx2,ovaly2,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb3,ovalyb3, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx3,ovaly3,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb4,ovalyb4, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx4,ovaly4,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb5,ovalyb5, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx5,ovaly5,width,height);
                 g.setColor(Color.black);
                 g.fillOval(ovalxb6,ovalyb6, 25,25); 
                 g.setColor(Color.orange); 
                 g.fillOval(ovalx6,ovaly6,width,height);
                //schietding
                 g.fillRect(xpos2+350-17,317,6,40);
                 g.setColor(Color.green);
                 g.fillOval(xpos2+350-30,330,30,30);
                 g.setColor(Color.black);
                 g.fillRect(xpos2+350-40,350,50,height);
                //kogel
                 g.fillRect(xposkogel+350-16,yposkogel,5,5);     
                 public class AnimationDemo{
                     JFrame frame;
                     Animation animation;
                     void demo(){
                         frame=new JFrame("**Spees Inveeders** All rights reserved (Dave Senden and Joeri Oomen)");
                         animation=new Animation();
                         frame.getContentPane().add(animation);
                         frame.setSize(700,400);
                         frame.setVisible(true);
                         animation.start();
      public static void main(String[] args){
            AnimationDemo animationDemo=new AnimationDemo();
            animationDemo.demo();

Maybe you are looking for

  • Can't import video to iTunes

    I have just purchased an 80gb iPod classic, and installed iTunes for the first time. I used Adobe Premier Elements 3.0 to convert 5 video clips of our children to iPod (H.264). Of the 5, 4 were imported as movies by iTunes. However, I cannot find a w

  • HT5661 Back up

    Hi All Need some help as I'm so rubbish at technology!! I have the OLD I phone 3 and tomorrow I'm getting my I phone 5, anyone know how to back up on I tunes? I know I'll have a new dimension, but I just wanted to transfered everything from my old ph

  • Problem in downloading the role

    I am trying to download a role via tcode "/n/virsa/re_dnldroles" but it gives a message "unknown error occured" ..Can anybody provide some information on this. Why the role is not getting downloaded. ?

  • Bapi_po_create1 - enjoy purchase orders

    Hi I am using bapi_po_create1 for purchase orders conversion. I have a problem in using this. Whatever delivery date i supply in bapimeposchedule-delivery_date, it is getting overridden with the default date else current date. would like to have a so

  • HELP!!! Something going on this morning with some apps

    When I touch my phone this morning, a message keeps on popping up that different apps are stopped unexpectedly and to force close, and try again. It has happened with my white pages app, and other apps, but repeatedly my swiftkey app. Whats going on?