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

2017/5/31

How do I make the transition of images delayed?

Alola_Sandslash Alola_Sandslash

2017/5/31

#
How do I make the transition of images delayed? I use several images but they flip so fast you can barely notice it.
danpost danpost

2017/5/31

#
Alola_Sandslash wrote...
How do I make the transition of images delayed? I use several images but they flip so fast you can barely notice it.
Basically, something like this:
/** add the following line outside any methods */
private int imgTimer;

/** in act method */
imgTimer++;

/** to run the animation */
if (imgTimer == 6) // adjust value as needed
{
    imgTimer = 0;
    // change image here
}
Alola_Sandslash Alola_Sandslash

2017/5/31

#
Thank you I believe it works.
Alola_Sandslash Alola_Sandslash

2017/5/31

#
It worked in most of my characters except in this one... now the images won't flip when he changes directions...
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 int imgTimer;
    
    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();
        imgTimer++;
        if (535>=getY())
        {
            gravity();
        }
        if (getX()>=1350)
        {
            rollDir = true;
        }
        if (20>=getX())
        {
            rollDir = false;
        }
        if (life == 0)
        {
            defeated();
        }
        if (imgTimer == 15 && rollDir == true)
        {
            imgTimer = 0;
            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);
            }
        }
        if (imgTimer == 5 && rollDir == false)
        {
            imgTimer = 0;
            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 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);
       
    }
    public void rollRight()
    {
       move(3);
       
    }
}
danpost danpost

2017/5/31

#
Alola_Sandslash wrote...
It worked in most of my characters except in this one... now the images won't flip when he changes directions
You need to use the same limiting value on lines 66 and 98.
Alola_Sandslash Alola_Sandslash

2017/6/2

#
It works much better now except while going right the actor's images flip between facing left and facing right every second or so.
You need to login to post a reply.