I have a code for my animation that works but it is really heavy and I think there are some useless part in it...
I have to goals with my animation: one constant animation for each enemy type and a little touchAnimation when a bullet hit's them. http://www.greenfoot.org/scenarios/7845 Here you can see my project and how they animates.
The code I use now s this one:
How can I have the same result without so much code?
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.util.List; import java.util.ArrayList; /** * Write a description of class Enemy here. * * @author (your name) * @version (a version number or a date) */ public class Enemy extends Actions { private String imageUsed; private int typeOfEnemy; private int lifeLeft; private int pointWin; GreenfootImage[] framesEnemy1 = new GreenfootImage[8]; GreenfootImage[][] allFramesEnemy1 = new GreenfootImage[2][8]; GreenfootImage[] framesEnemy2 = new GreenfootImage[8]; GreenfootImage[][] allFramesEnemy2 = new GreenfootImage[2][8]; final int CONSTANT = 4; int imgFrame1 = 0; int imgFrame2 = 0; int enemy1Contact = 1; int enemy1Num; int enemy2Contact = 1; int enemy2Num; private int reloadTime = 1; private int fixTimerValue = 50; public Enemy(String enemyImage,int enemyType, int life, int pointEarned) { imageUsed = enemyImage; typeOfEnemy = enemyType; lifeLeft = life; pointWin = pointEarned; setImage(imageUsed); for(int j=0; j<2; j++) for (int k=0;k<framesEnemy1.length;k++) allFramesEnemy1[j][k]=new GreenfootImage("enemy1"+j+"touch"+(k+1)+".png"); framesEnemy1 = allFramesEnemy1[enemy1Contact]; for(int l=0; l<2; l++) for (int m=0;m<framesEnemy2.length;m++) allFramesEnemy2[l][m]=new GreenfootImage("enemy2"+l+"touch"+(m+1)+".png"); framesEnemy1 = allFramesEnemy1[enemy2Contact]; } public void act() { checkType(); if (getWorld() != null) { if (typeOfEnemy == 1) animateEnemy1(); if (typeOfEnemy == 2) animateEnemy2(); } } public void checkType() { if (typeOfEnemy == 1) { randomMove(); move(-3); backToStart(); colisionCheck(); } if (typeOfEnemy == 2) { randomMove(); //colisionCheck(); if (Greenfoot.getRandomNumber(5000) <= 10) { canShootNormal("enemyShot1.png"); } } if (typeOfEnemy == 3) { chargeHero(); if (!chargingHero)verticalMove(); backToStart(); colisionCheck(); } if (typeOfEnemy == 4) { } if (typeOfEnemy == 5) { } if (typeOfEnemy == 6) { } } public void hit(int damage) { lifeLeft = lifeLeft - damage; hitAnimationEnemy(); if(lifeLeft <= 0) { ((Counter)getWorld().getObjects(Counter.class).get(0)).add(pointWin); dropBonusRandom(); getWorld().removeObject(this); } } public void hitAnimationEnemy() { //pour ennemi 1 if (typeOfEnemy == 1 && lifeLeft == 7) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 6) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 5) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 4) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 3) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 2) { setImage("enemy11touch1.png"); } if (typeOfEnemy == 1 && lifeLeft == 1) { setImage("enemy11touch1.png"); } //pour ennemi 2 if (typeOfEnemy == 2 && lifeLeft == 8) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 7) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 6) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 5) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 4) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 3) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 2) { setImage("enemy21touch2.png"); } if (typeOfEnemy == 2 && lifeLeft == 1) { setImage("enemy21touch2.png"); } } public void animateEnemy1() { enemy1Num = typeOfEnemy-1; if (enemy1Num != enemy1Contact) { enemy1Contact = enemy1Num; framesEnemy1 = allFramesEnemy1[enemy1Contact]; imgFrame1 = CONSTANT; } if (imgFrame1 % 4 == 0) setImage(framesEnemy1[imgFrame1/CONSTANT]); imgFrame1++; if (imgFrame1 == CONSTANT*framesEnemy1.length) imgFrame1 = 0; } public void animateEnemy2() { enemy2Num = typeOfEnemy-2; if (enemy2Num != enemy2Contact) { enemy2Contact = enemy2Num; framesEnemy2 = allFramesEnemy2[enemy2Contact]; imgFrame2 = CONSTANT; } if (imgFrame2 % 4 == 0) setImage(framesEnemy2[imgFrame2/CONSTANT]); imgFrame2++; if (imgFrame2 == CONSTANT*framesEnemy2.length) imgFrame2 = 0; } }