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

2019/12/12

how i can make my actor take points

Petr Petr

2019/12/12

#
i have problem with my actor . every time i step on one its give me error like this java.lang.NullPointerException at hráč.points(hráč.java:40) at hráč.act(hráč.java:71)
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class hráč here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class hráč extends Actor
{
    // nastavení zvukového efektu
    GreenfootSound cink = new GreenfootSound("26f8b9_sonic_ring_sound_effect.mp3");
    //celková rychlost hráče
    int rychlost = 3;
    // určuje vzdálenost od pevného objektu
    int vzdálenost;
    //deklaruje svět v hráči
    MyWorld můjsvět;
    svět2 můjsvět2;
    boolean maximumbodů = false;
    // pevně nastavaené směry do kterých se hráč může pohybovat
    class Směr{
        public static final int Nahoru = 270;
        public static final int Dolů = 90;
        public static final int Doprava = 0;
        public static final int Doleva = 180;
    
    }
    public hráč(){
    vzdálenost = getImage().getWidth();
    }
    public void addedToWorld(World w,svět2 w2){
        můjsvět = (MyWorld)w;
        můjsvět2 = (svět2)w2;
    }
    // odělá body z mapy a přidá 5 score
    public void points(){
    Actor body = getOneIntersectingObject(points.class);
      if(body!=null){
        můjsvět.removeObject(body);
        můjsvět2.removeObject(body);
        můjsvět.addScore(5);
        můjsvět2.addScore(5);
        cink.play();
        
      }
      
    }
    /**
     * Act - do whatever the hráč wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        //pohyb po přes tlačítka na klávesnici
        
        
        if(Greenfoot.isKeyDown("W")){
            setRotation(Směr.Nahoru);
            moveHráč();
    }else if (Greenfoot.isKeyDown("S")){
            setRotation(Směr.Dolů);
            moveHráč();
    }else if(Greenfoot.isKeyDown("A")){
            setRotation(Směr.Doleva);
            moveHráč();
    }else if(Greenfoot.isKeyDown("D")){
            setRotation(Směr.Doprava);
            moveHráč();
    } 
       points();
    }
    public void moveHráč(){
        //zjišťuje pevnou souřadnici X
        int X = getX();
        //zjišťuje pevnou souřadnici Y
        int Y = getY();
        //zjišťuje rotaci
        int Rotace = getRotation();
        int ZměnaX = getZměnaX(Rotace);
        int ZměnaY = getZměnaY(Rotace);
        int přídavekKeX = adjustOffset(ZměnaX);
        int přídavekKeY = adjustOffset(ZměnaY);
        Actor rock = getOneObjectAtOffset(adjustOffset(ZměnaX),adjustOffset(ZměnaY),rock.class);
        if(rock == null){
            setLocation(X + ZměnaX ,Y + ZměnaY);
        }
        
    }
    private int getZměnaX(int Rotace){
        if(Rotace == Směr.Doprava){
          return rychlost;
        }
        if(Rotace == Směr.Doleva){
            return -rychlost;
        }       
        return 0;
    }
    private int getZměnaY(int Rotace){
        if(Rotace == Směr.Dolů){
          return rychlost;
        }
        if(Rotace == Směr.Nahoru){
            return -rychlost;
        }   
        return 0;
    }
    private int adjustOffset(int mimo){
      int známkanarazu = (int)Math.signum(mimo);
      int vzádálenostod = vzdálenost/2;
      int adjustAmount = vzádálenostod * známkanarazu; 
      return mimo + adjustAmount;
    }
}
danpost danpost

2019/12/12

#
Okay -- here you will need to know which type of World subclass the actor is in. Saving the world in a field, however, really does not help to make things easier. In fact, it just complicates things. Removes lines 17 thru 19 and lines 32 thru 35. Then, replace lines 40 and 41 with:
getWorld().removeObject(body);
Lines 42 and 43 will need to be replaced with an if structure to determine the type of world so you do not addScore on a null reference:
if (getWorld() instanceof MyWorld) ((MyWorld)getWorld()).addScore(5);
else if (getWorld() instanceof svět2) ((svět2)getWorld()).addScore(5);
Petr Petr

2019/12/12

#
thx man now thanks to you i completed my game.
You need to login to post a reply.