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

2014/6/29

Objects won't move

dan11 dan11

2014/6/29

#
I'm working on a game, and in the first level, all the enemies move fine. Then, when I go to the next level, the enemies won't move. They turn like they should, but move(int) will not work in the second level for some reason. Code for enemies:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class E1 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class E1 extends Enemies
{
    double speed = 2;//this is a subclass of SmoothMover, so I use double just in case I want to set speed to a decimal number
    int damage = 3;
    int health = 10;
    int pspeed = 6;//bullet speed
    int fRate = 15;//firing rate
    private EP1 ep_;//its bullet

    int pxd; //x distance from Player
    int pyd; //y distance from PLayer
    int c; //counter for shooting
    int mc = 0;//movement counter per turn, (will turn after mc > mcl)
    int mcl = 20;//movement counter limit
    
    /**
     * Act - do whatever the E1 wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        Wall w_ = (Wall)getWorld();
        
        mover2();
        
    }    
    

    void shoot(){
        c = c + 1;
        if(c>fRate){
            Wall w_ = (Wall)getWorld();
            ep_ = new EP1();
            w_.addObject(ep_,getX(),getY());
            ep_.speed = pspeed;
            ep_.damage = damage;
            ep_.setRotation(getRotation());
            c = 0;
        }
    }
    void mover2(){//
        Wall w_ = (Wall)getWorld();
        pxd = (w_.b().getX()-getX());
        pyd = (w_.b().getY()-getY());
        int px = getX();
        int py = getY();
        
        if(pyd<30&&pyd>-30){
            if(pxd<0){
                setRotation(180);
                
                shoot();
            }
            if(pxd>0){
                setRotation(0);
                
                shoot();
            }
        }else if(pxd<60 && pxd>-60){
            if(pyd<100 && pyd>0 && !atEdge()){
                setRotation(270);
                move(speed);
            }else if(pyd>-100 && pyd<0 && !atEdge()){
                setRotation(90);
                move(speed);
            }else if(pyd>0){
                setRotation(90);
                shoot();
            }else if(pyd<0){
                setRotation(270);
                shoot();
            }

        }else{
            mc = mc + 1;
            move(speed);
            if(mc>mcl){
                int rot = (Greenfoot.getRandomNumber(4)*90);
                setRotation(rot);
                mcl = Greenfoot.getRandomNumber(20)+10;
                mc = 0;
            }
            if(getY()>595 || getY()<5){
                if(getY()>595){
                    setRotation(270);
                }
                if(getY()<5){
                    setRotation(90);
                }
            }else{
                if(getX()>795){
                    setRotation(180);
                }
                if(getX()<5){
                    setRotation(0);
                }
            }
            
        }
        if(isTouching(Barrier.class)){
            setLocation(px,py);
        }
    }
    boolean atEdge(){
        if(getX()>795 || getX()<5 || getY()>595 || getY()<5){
            return true;
        }else{
            return false;
        }
    }
    public void damage(int d){
        health = health - d;
        if(health<1){
            Wall w_ = (Wall)getWorld();
            w_.removeObject(this);
            w_.enemyLost();
        }
    }
}
And the world code:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Wall here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Wall extends World
{
    private Blocky b_;
    private Barrier ba_;
    private E1 e1_;
    public int level = 0;
    public int enemyCount = 0;//enemies still alive in level
    /**
     * Constructor for objects of class Wall.
     * 
     */
    public Wall()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(800, 600, 1); 
        L1();
    }

    public void L1()//set up for level 1
    {   level = 1;
        b_ = new Blocky();
        addObject(b_,50,300);
        addBarrier(400,300,10,70);

        e1_ = new E1();
        addObject(e1_,550,400);

        e1_ = new E1();
        addObject(e1_,550,200);

        enemyCount = 2;

    }

    public void L2()//set up for level 2
    {   level = 2;
        enemyCount = 2;
        b().setLocation(50,300);

        addBarrier(400,300,50,50);
        
        addObject(new E1(),550,400);
       
        addObject(new E1(),550,200);
    }

    public void enemyLost(){
        enemyCount = enemyCount - 1;
        if(enemyCount<1){
            ba().deleteSelf();
            
            if(level == 1){
                L2();
            }
        }
    }

    public void addBarrier(int x, int y, int ix, int iy){
        ba_ = new Barrier();
        addObject(ba_,x,y);
        ba_.getImage().scale(ix,iy);
    }

    public Blocky b(){
        return b_;
    }
    public Barrier ba(){
        return ba_;
    }

    

}
dan11 dan11

2014/6/29

#
Never mind, I have fixed it
You need to login to post a reply.