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

2017/10/10

Animating a walk cycle... kind of.

Beamo Beamo

2017/10/10

#
Hi again! I'm currently attempting to animate a walk cycle. I have made three images, for the walk cycle. This is my code for it:
public void move(){ //setting Images //idle1 GreenfootImage idleOneRight = new GreenfootImage("Idle1.png"); GreenfootImage idleOneLeft = new GreenfootImage("Idle1.png"); idleOneRight.mirrorHorizontally(); //idle2 GreenfootImage idleTwoRight = new GreenfootImage("Idle2.png"); GreenfootImage idleTwoLeft = new GreenfootImage("Idle2.png"); idleTwoRight.mirrorHorizontally(); //shoot1 GreenfootImage shootOneRight = new GreenfootImage("shoot1.png"); GreenfootImage shootOneLeft = new GreenfootImage("shoot1.png"); shootOneRight.mirrorHorizontally(); //shoot2 GreenfootImage shootTwoRight = new GreenfootImage("shoot2.png"); GreenfootImage shootTwoLeft = new GreenfootImage("shoot2.png"); shootTwoRight.mirrorHorizontally(); if(Greenfoot.isKeyDown("left")){ setImage(idleOneLeft); getImage().scale(getImage().getWidth() + 75, getImage().getHeight() + 75); move(-5); while(Greenfoot.isKeyDown("left")){ int leftDelayOne = 0; int leftResetOne=5; if(leftDelayOne==0)leftDelayOne--;{ GreenfootImage runningOne = new GreenfootImage("running1.png"); GreenfootImage runningThree = new GreenfootImage("running3.png"); GreenfootImage checkImage = getImage(); if(checkImage==idleOneLeft||checkImage==idleTwoLeft||checkImage==runningThree){ setImage(runningOne); getImage().scale(getImage().getWidth()+75,getImage().getHeight()+75); leftDelayOne = leftResetOne; } } int leftDelayTwo = 0; int leftResetTwo = 5; if(leftDelayTwo == 0)leftDelayTwo--;{ GreenfootImage runningOne = new GreenfootImage("running1.png"); GreenfootImage runningTwo = new GreenfootImage("running2.png"); GreenfootImage checkImage = getImage(); if(checkImage == runningOne){ setImage(runningTwo); getImage().scale(getImage().getWidth()+75,getImage().getHeight()+75); leftDelayTwo = leftResetTwo; } } int leftDelayThree = 0; int leftResetThree = 5; if(leftDelayThree==0)leftDelayThree--;{ GreenfootImage runningTwo = new GreenfootImage("running2.png"); GreenfootImage runningThree = new GreenfootImage("running3.png"); GreenfootImage checkImage = getImage(); if(checkImage == runningTwo){ setImage(runningThree); getImage().scale(getImage().getWidth()+75,getImage().getHeight()+75); leftDelayThree = leftResetThree; } } } } if(Greenfoot.isKeyDown("right")){ move(5); setImage(idleOneRight); getImage().scale(getImage().getWidth() + 75, getImage().getHeight() + 75); } if(Greenfoot.isKeyDown("up")&&getY()>getWorld().getHeight()-55){ jump(); } if(Greenfoot.isKeyDown("space")){ } while(Greenfoot.isKeyDown("left")==false&&Greenfoot.isKeyDown("up")==false&&Greenfoot.isKeyDown("right")==false&&checkOnFloor()==true){ }
It's super convoluted code but it's all I have right now. Anyway, it isnt working so any advice would be appreciated. Thanks!
Beamo Beamo

2017/10/11

#
EDIT: I am trying something else that is a lot less convoluted:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class testhero here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class testhero extends Actor
{
    public boolean lookingLeft;
    public boolean lookingRight;
    private int imageCounter;
    public testhero(){
        GreenfootImage idleLeft = new GreenfootImage("Idle1.png");
        GreenfootImage idleRight = new GreenfootImage("Idle1.png");
        idleRight.mirrorHorizontally();
        setImage(idleLeft);
        getImage().scale(getImage().getWidth()+75, getImage().getWidth()+75);
    }
    public void act() 
    {
        move();
    }    
    public void move(){
        if(Greenfoot.isKeyDown("left")){
            lookingLeft = true;
            setLocation(getX()-1,getY());
            while(Greenfoot.isKeyDown("left")){leftWalk();}
        }
        if(Greenfoot.isKeyDown("right")){
            lookingRight = true;
            rightWalk();
        }
    }
    public void leftWalk(){
        GreenfootImage runningOne = new GreenfootImage("running1.png");
        GreenfootImage runningTwo = new GreenfootImage("running2.png");
        GreenfootImage runningThree = new GreenfootImage("running3.png");
        runningOne.scale(getWorld().getWidth()+75,getWorld().getHeight()+75);
        runningTwo.scale(getWorld().getWidth()+75,getWorld().getHeight()+75);
        runningThree.scale(getWorld().getWidth()+75,getWorld().getHeight()+75);
        int span = 2;
        int imageTimer=0;
        imageTimer++;
        if(imageTimer==span){setImage(runningOne);}
        if(imageTimer==span*2){setImage(runningTwo);}
        if(imageTimer==span*3){setImage(runningThree); imageTimer=0;}
    }
    public void rightWalk(){
        
    }
}
Still doesn't work however :(
Super_Hippo Super_Hippo

2017/10/11

#
You should remove the while with its condition in line 29. Save the variables used in leftWalk outside of the method. Right now, each time you enter the method, it will be created again so imageTimer will never be greater than 1.
You need to login to post a reply.