This site requires JavaScript, please enable it in your browser!
Greenfoot back
salvo
salvo wrote ...

2017/3/25

how can I restrict my Bullets

salvo salvo

2017/3/25

#
Hey everybody (sorry for my english) :D here is the scenario I have a rocket which shoots bullets called "projektilGelb". but when i press the "r" key i can shoot frequently infinity bullets how do i restrict it, so that my rocket can only shoot every 2 seconds for example
salvo salvo

2017/3/25

#
here is the code of my rocket
public class Rocket1 extends Actor
{
 // Konstanten für eine bessere Lesbarkeit des Codes
    private static final int NORDEN = 2;
    private static final int SUEDEN = 3;

 // Zustandsvariablen, in denen die Attributwerte des Objekts gespeichert werden
    private int zRichtung;
    
 
 public void act()//die Rakete tut das was hier drin steht
    {
        processKeys();
   }
   
   /**
    *keyboard Steuerung.
    */
   private void processKeys()//deffiniert die Keyboard Steuerung der Rakete
   {
    if(Greenfoot.isKeyDown("w"))//bewege dich durch Pfeiltaste Up
    { setLocation(getX(), getY() - 1);
         } 
    if(Greenfoot.isKeyDown("s"))//bewege dich durch Pfeiltaste Down
    {setLocation(getX(), getY() + 1);
         }
    if(Greenfoot.isKeyDown("r"))//schießt PorjektilGelb ab
    { setProjektilGelb();
    }
   }
   
   /**
     * Bewege dich eine Zelle in der aktuellen Richtung nach vorne. 
     */
    public void bewege()//Verändere die Position in Abhängigkeit zu den Tastanschläge
    {
        switch(zRichtung)//deffiniert die durchzuführende Bewegung
        {
            case NORDEN:
                setLocation(getX(), getY() + 1);//bewegt sich nach Oben
                break;
            case SUEDEN:
                setLocation(getX(), getY() - 1);//bewegt sich nach Unten
                break;
        }
    }
    
   public void setProjektilGelb()//Rakete greift auf Objekt "ProjektilGelb" zu
    {
       ProjektilGelb Gelb = new ProjektilGelb(); // ein neuer ProjektilGelb wird deklariert und erzeugt
       World SpaceWelt = getWorld(); // ein Referenzattribut der Welt wird gespeichert
       SpaceWelt.addObject(Gelb,getX(), getY());//eine Methode der Welt wird aufgerufen um ProjektilGelb zusetzten 
        
    }
    
    }
salvo salvo

2017/3/25

#
maybe use delay ?
Super_Hippo Super_Hippo

2017/3/25

#
salvo wrote...
Hey everybody (sorry for my english) :D
Dein Deutsch in den Kommentaren ist auch nicht gerade fehlerfrei :P Greenfoot.delay() pauses the whole scenario, so this is not an option. Add a timer field, then it can look like this:
private int schussTimer = 0;

public void act()
{
    int dy=0;
    if (Greenfoot.isKeyDown("w")) dy--;
    if (Greenfoot.isKeyDown("s")) dy++;
    setLocation(getX(), getY()+dy);
    
    if (schussTimer > 0) schussTimer--;
    else if (Greenfoot.isKeyDown("r"))
    {
        getWorld().addObject(new ProjektilGelb(), getX(), getY());
        schussTimer = 120;
    }
}
You can remove your post in the other discussion which asks the same thing.
salvo salvo

2017/3/25

#
danke hippo ich Versuchs mal ich bin Italiener :P :D
salvo salvo

2017/3/25

#
I am sorry but the code doesn't work nothing change my rocket fires frequently
Super_Hippo Super_Hippo

2017/3/25

#
Ok, interesting that your comments are in German then :) I am not sure when you saw it. I edited my post a minute after I posted it because I messed it up. I think it should work as it is now. Maybe show again what you have now.
salvo salvo

2017/3/26

#
here is my code
public class Rocket1 extends Actor
{
 // Konstanten für eine bessere Lesbarkeit des Codes
    private static final int NORDEN = 2;
    private static final int SUEDEN = 3;
    private int schussTimer = 0;

 // Zustandsvariablen, in denen die Attributwerte des Objekts gespeichert werden
    private int zRichtung;
    
 
 public void act()//die Rakete tut das was hier drin steht
    {
    processKeys();
    
   int dy=0;
    {if (Greenfoot.isKeyDown("w")) dy--;
    if (Greenfoot.isKeyDown("s")) dy++;
    setLocation(getX(), getY()+dy);
}
  if (schussTimer > 0) schussTimer--;
    else if (Greenfoot.isKeyDown("r"))
    {
        getWorld().addObject(new ProjektilGelb(), getX(), getY());
        schussTimer = 120;
    }
   }
   
   /**
    *keyboard Steuerung.
    */
   private void processKeys()//deffiniert die Keyboard Steuerung der Rakete
   {
    if(Greenfoot.isKeyDown("w"))//bewege dich durch Pfeiltaste Up
    { setLocation(getX(), getY() -1);
         } 
    if(Greenfoot.isKeyDown("s"))//bewege dich durch Pfeiltaste Down
    {setLocation(getX(), getY() +1);
         }
    
         if(Greenfoot.isKeyDown("r"))//schießt PorjektilGelb ab
    { setProjektilGelb();
    }
    
   }
   
   /**
     * Bewege dich eine Zelle in der aktuellen Richtung nach vorne. 
     */
    public void bewege()//Verändere die Position in Abhängigkeit zu den Tastanschläge
    {
        switch(zRichtung)//deffiniert die durchzuführende Bewegung
        {
            case NORDEN:
                setLocation(getX(), getY() + 1);//bewegt sich nach Oben
                break;
            case SUEDEN:
                setLocation(getX(), getY() - 1);//bewegt sich nach Unten
                break;
        }
    }
    
   public void setProjektilGelb()//Rakete greift auf Objekt "ProjektilGelb" zu
    {
       ProjektilGelb Gelb = new ProjektilGelb(); // ein neuer ProjektilGelb wird deklariert und erzeugt
       World SpaceWelt = getWorld(); // ein Referenzattribut der Welt wird gespeichert
       SpaceWelt.addObject(Gelb,getX(), getY());//eine Methode der Welt wird aufgerufen um ProjektilGelb zusetzten 
       
    
     
    }
    
    }
salvo salvo

2017/3/26

#
ok danke hab den Fehler gefunden Thanks
You need to login to post a reply.