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

2017/5/30

2 Problems: Images randomly flip sometimes and sometimes my character will die and sometimes it won't

Alola_Sandslash Alola_Sandslash

2017/5/30

#
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Ape here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Ape extends Enemy
{
    private GreenfootImage image1;
    private GreenfootImage image2;
    private GreenfootImage image3;
    private GreenfootImage image4;
    private GreenfootImage image5;
    private GreenfootImage image6;
    private GreenfootImage image7;
    private GreenfootImage image8;
    private GreenfootImage image9;
    private GreenfootImage image10;
    private GreenfootImage image11;
    private GreenfootImage image12;
    
    private boolean rollDir = true;
    private int life = 10;
    public Ape()
    {
        image1= new GreenfootImage("apeLeft1.png");
        image2= new GreenfootImage("apeLeft2.png");
        image3= new GreenfootImage("apeLeft3.png");
        image4= new GreenfootImage("apeLeft4.png");
        image5= new GreenfootImage("apeLeft5.png");
        image6= new GreenfootImage("apeLeft6.png");
        image7= new GreenfootImage("apeRight1.png");
        image8= new GreenfootImage("apeRight2.png");
        image9= new GreenfootImage("apeRight3.png");
        image10= new GreenfootImage("apeRight4.png");
        image11= new GreenfootImage("apeRight5.png");
        image12= new GreenfootImage("apeRight6.png");
        
        setImage(image1);
    }
    public void act() 
    {
        roll();
        takeDamage();
        killPlayer();
        
        if (getX()>=1350)
        {
            rollDir = true;
        }
        if (20>=getX())
        {
            rollDir = false;
        }
        if (life == 0)
        {
            defeated();
        }
    }    
    public void roll()
    {
        if (rollDir == true)
        {
            rollLeft();
        }
        if (rollDir == false)
        {
            rollRight();
        }
    }
    public void takeDamage()
    {
        Actor redBeamLeft;
        redBeamLeft = getOneObjectAtOffset(0,0,RedBeamLeft.class);
        Actor redBeamRt;
        redBeamRt = getOneObjectAtOffset(0,0,RedBeamRt.class);
        Actor redBeamUp;
        redBeamUp = getOneObjectAtOffset(0,0,RedBeamUp.class);
        Actor redBeamDown;
        redBeamDown = getOneObjectAtOffset(0,0,RedBeamDown.class);
        if (redBeamLeft!=null | redBeamRt!=null | redBeamUp!=null | redBeamDown!=null)
        {
            life--;
        }
    }
    private void defeated()
    {
        getWorld().removeObject(this);
    }
    public void rollLeft()
    {
       move(-3);
       if (getImage()==image1)
       {
            setImage(image2);
       } 
       else if (getImage()==image2)
       {
            setImage(image3);
       }
       else if (getImage()==image3)
       {
            setImage(image4);
       }
       else if (getImage()==image4)
       {
            setImage(image5);
       }
       else if (getImage()==image5)
       {
            setImage(image6);
       }
       else if (getImage()==image6)
       {
            setImage(image1);
       }
       else
       {
            setImage(image1);
       }
    }
    public void rollRight()
    {
       move(3);
       if (getImage()==image7)
       {
            setImage(image8);
       } 
       else if (getImage()==image8)
       {
            setImage(image9);
       }
       else if (getImage()==image9)
       {
            setImage(image10);
       }
       else if (getImage()==image10)
       {
            setImage(image11);
       }
       else if (getImage()==image11)
       {
            setImage(image12);
       }
       else if (getImage()==image12)
       {
            setImage(image7);
       }
       else
       {
            setImage(image7);
       }
    }
    public void killPlayer()
    {
        Actor candy;
        candy = getOneObjectAtOffset(0,0,Candy.class);
        if(candy!=null)
        {
           getWorld().removeObject(candy);
           
           Lost lost = new Lost();
           getWorld().addObject(lost, 700, 300);
           
           Greenfoot.stop();
        }
    }
}
danpost danpost

2017/5/30

#
You probably just need to slow down the animation. Add a counter to the class to count act steps (by incrementing its value each act step. Each time the value becomes some nominal number (maybe 6 or 8 -- adjust as desired), then set the next image and reset the counter back to zero.
Alola_Sandslash Alola_Sandslash

2017/5/31

#
Can you show me the code to do that?
You need to login to post a reply.