Je fais un jeu vraiment simple, mais je suis coincé avec un problème étrange; Je veux que le zombie frappe le personnage quand il le peut mais il me frappe deux fois au lieu d'une fois.Traitement, exécution si déclaration deux fois au lieu d'une fois
void zombieAttack(float distance){
if(zombieCanAttack && (distance < charSizeX/2+zombieSize/2)){
charApplyDamage(5);
zombieAttackCounter_obj.counter(0);
zombieAttackCounter = 0;
println("second " + zombieCanAttack);
zombieCanAttack = false;
}
}
J'ai même supprimé le code qui rend zombieCanAttack vrai lorsque la minuterie le dit, donc il n'y a rien qui fait zombieCanAttack vrai, mais même si le programme me donne cette sortie deux fois: « seconde vrai ". Cela provoque zombie à frapper le personnage deux fois au lieu d'une fois. Pourquoi entre-t-il deux fois une instruction?
Edit: Voici la classe complète zombie:
class Zombie {
float zombieX, zombieY, zombieSizeX, zombieSizeY, zombieSize, zombieHp, zombieDamage,
zombieSpeed, zombieThresholdX, zombieThresholdY, zombieAttackCounter;
boolean zombieFlip, zombieCanAttack = true;
Counter zombieAttackCounter_obj = new Counter();
void instantiateZombie(float x, float y, float sizeX, float sizeY, float hp,
float damage, float speed, int thresholdX, int thresholdY){
zombieX = x;
zombieY = y;
zombieSizeX = sizeX;
zombieSizeY = sizeY;
zombieSize = (sizeX+sizeY)/4;
zombieHp = hp;
zombieDamage = damage;
zombieSpeed = speed;
zombieThresholdX = thresholdX;
zombieThresholdY = thresholdY;
}
void zombieAI(){
zombieAttackCounter = zombieAttackCounter_obj.counter(-1);
noStroke();
fill(255, 0, 0);
rect(zombieX, zombieY, zombieSizeX, zombieSizeY);
float distance = dist(charX, charY, zombieX, zombieY);
if(distance+zombieSizeX/2 > charSizeX/2+zombieSizeX/2){
zombieWalk();
} else {
zombieAttack(distance);
}
//println("first " + zombieCanAttack);
if(zombieAttackCounter > 1.5){ /*zombieCanAttack = true; */}
}
void zombieWalk(){
if(zombieX-charX < zombieThresholdX && zombieX-charX > -zombieThresholdX){ }
else if(zombieX-charX < 0){
zombieX+=zombieSpeed; zombieFlip = true;
}
else{
zombieX-=zombieSpeed; zombieFlip = false;
}
if(zombieY-charY < zombieThresholdY && zombieY-charY > -zombieThresholdY){ }
else if(zombieY-charY < 0){
zombieY+=zombieSpeed;
}
else{
zombieY-=zombieSpeed;
}
}
void zombieAttack(float distance){
if((zombieCanAttack) && (distance < charSizeX/2+zombieSize/2)){
charApplyDamage(5);
zombieAttackCounter_obj.counter(0);
zombieAttackCounter = 0;
println("second " + zombieCanAttack);
zombieCanAttack = false;
}
}
}
est complet ici .pde dans tous les cas: http://paste.ubuntu.com/7824949/
Collez votre code et expliquez-le correctement. – Devavrata
Pouvez-vous montrer votre classe entière afin que nous puissions l'exécuter et voir ce qui se passe? Il est impossible de trouver l'aiguille quand vous nous avez seulement donné la moitié de la meule de foin. –
Avez-vous plusieurs threads en cours d'exécution? – Bohemian