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

2021/3/24

I definetely need help

Max0309 Max0309

2021/3/24

#
Hi there, my problem is, that Enemies, which move on their own (they follow me), can go through structions/objects. The Player I move doesn't. Can someone help me fixxing the issue? Code from one Ememy:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)

/**
 * Ergänzen Sie hier eine Beschreibung für die Klasse enemy.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class Enemy extends Actor
{
    static int died = 0;
    int enemyspeed= 1;
    /**
     * Act - tut, was auch immer enemy tun will. Diese Methode wird aufgerufen, 
     * sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden. 
     */
    
    public void act() 
    {
        
        int y = getY();
        int x = getX();
        
        if(Greenfoot.getRandomNumber(400)>Person.xPerson && x>Person.xPerson){
        moveLeft();
        
       }else if(Greenfoot.getRandomNumber(400)-20<Person.xPerson&& x<Person.xPerson){
        moveRight();
        }
        if(Greenfoot.getRandomNumber(400)>Person.yPerson && y>Person.yPerson){
        moveUp();
        
       }else if(Greenfoot.getRandomNumber(400)<Person.yPerson && y<Person.yPerson){
        moveDown();
        }
        if(checkHit()){
         died++;
         coinDrop();
         destroy();
		 
          
       }
	   
       
     
    } 
 
    public boolean checkHit(){
        if(getIntersectingObjects(DownBullet.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(UpperBullet.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(LeftBullet.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(RightBullet.class).size() > 0) {
            return true;
        }
        return false;
    }
   
    private void destroy() {       
        removeTouching(LeftBullet.class);
        removeTouching(RightBullet.class);
        removeTouching(UpperBullet.class);
        removeTouching(DownBullet.class);
        getWorld().removeObject(this);      
    }
    
    public void moveLeft() {
        setLocation(getX() - enemyspeed, getY()); 
    }
    public void moveRight() {
       setLocation(getX() + enemyspeed, getY());         
    }    
    public void moveUp() {
        setLocation(getX(), getY() - enemyspeed);
    }    
    public void moveDown() { 
        setLocation(getX(), getY() + enemyspeed);  
    }
    
	public boolean checkCollision(){
        if(getIntersectingObjects(Object_Senkrecht.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_Waagerecht.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_ks.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_kw.class).size() > 0) {
            return true;
        }
        return false;
    }
	
	public void coinDrop(){
	if(Greenfoot.getRandomNumber(100)>=85){
		getWorld().addObject(new DogeCoin(), getX(), getY());
	     }
	}
    	
	
	
}  
Thats the code from the player:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Person here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Person extends Actor
{
    int Welt;
    int moveSpeed = 1;
    boolean up = true, left = true, right = true, down = true;
    static int xPerson = 0;
    static int yPerson = 0;
    static int coins = 0;
    
    public Person(int w) {
        Welt = w;
    }
    
    public void act() 
    {
        xPerson = getX();
        yPerson = getY();

        String m = movement();
           if(checkCollision()) {
            
            if(m.indexOf("d") > -1) {
               moveLeft(); 
            }
            if(m.indexOf("a") > -1) {
               moveRight(); 
            }
            if(m.indexOf("s") > -1) {
               moveUp(); 
            }
            if(m.indexOf("w") > -1) {
               moveDown(); 
            }

            }
         if(Enemy.died == 30){ 
            setImage("Charakter2.png");
             if(getY()>=390){
               Welt = Welt + 1;
               
               if(Welt == 2){
               Greenfoot.setWorld(new World2(220,30));
               setImage("Charakter.png");
            }
               if(Welt == 3){
               Greenfoot.setWorld(new World3(220,30));
               setImage("Charakter.png");
            }
               if(Welt == 4){
               Greenfoot.setWorld(new World4(220,30));
               setImage("Charakter.png");
            }
            }
        }
        shoot();

	 }
    private int shotTimer = 0;
      public void shoot()
    {
        
        if (shotTimer > 0) {
            shotTimer = shotTimer -1;
        }else if(Greenfoot.isKeyDown("down"))
        {
            getWorld().addObject(new DownBullet(), getX(), getY());
            shotTimer = 20;
        }else if(Greenfoot.isKeyDown("right")) { // oder welche Taste auch immer es sein soll
             getWorld().addObject(new RightBullet(), getX(), getY());
             shotTimer = 20;
        }else if(Greenfoot.isKeyDown("up")) { // oder welche Taste auch immer es sein soll
             getWorld().addObject(new UpperBullet(), getX(), getY());
             shotTimer = 20;
        }else if(Greenfoot.isKeyDown("left")){
             getWorld().addObject(new LeftBullet(), getX(), getY());
             shotTimer = 20;
            }
    }     
      
    
    public boolean checkCollision(){
        if(getIntersectingObjects(Object_Senkrecht.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_Waagerecht.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_ks.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(Object_kw.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g11.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g12.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g16.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g21.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g22.class).size() > 0) {
            return true;
        }
        if(getIntersectingObjects(g61.class).size() > 0) {
            return true;
        }
        return false;
    }
    
    
    public void moveLeft() {
        setLocation(getX() - moveSpeed, getY()); 
    }
    public void moveRight() {
       setLocation(getX() + moveSpeed, getY());         
    }
    
    public void moveUp() {
        setLocation(getX(), getY() - moveSpeed);
    }
    
    public void moveDown() { 
        setLocation(getX(), getY() + moveSpeed);
    }
    
    public String movement() {
        String result = "";
        if(Greenfoot.isKeyDown("w")) {
          moveUp();  
          result+="w";
        }
        if(Greenfoot.isKeyDown("a")) { 
          moveLeft();
          result+="a";
        }
        if(Greenfoot.isKeyDown("s")) {  
          moveDown();
          result+="s";
        }
        if(Greenfoot.isKeyDown("d")) {
          moveRight();
          result+="d";
        }
        return result;
    }
    
 }
Super_Hippo Super_Hippo

2021/3/24

#
Creating it once is enough. Let’s continue here: https://www.greenfoot.org/topics/64224/0
You need to login to post a reply.