2017-07-28 1 views
-2

J'ai du mal à faire fonctionner ma boucle for. Je peux soit le faire fonctionner une fois, soit sans limite. J'essaie d'obtenir des pièces à instancier jusqu'à 3 fois. Je ne pense pas que la boucle for elle-même est fausse, mais la structure est quelque part. La boucle est dans la fonction Butin.Je n'arrive pas à faire fonctionner ma boucle for

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class corpseKicked : MonoBehaviour { 

private Rigidbody2D rb; 
private Animator anim; 
public GameObject coinPrefab; 
public Transform coinSpawn; 
private bool kicked = false; 
public float timer = 2f; 
public GameObject deathFlamePrefab; 
private bool flamer; 
private bool pay = false; 
private bool broke = false; 

void Start() 
{ 
    anim = GetComponent<Animator>(); 
    rb = GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Looted(); 
} 

public void OnTriggerEnter2D(Collider2D other) 
{ 
    if (!kicked && other.gameObject.tag == "kickIndicator") { 
     kicked = true; 
     transform.Translate (0.0f, .05f, 0.0f); 
    } 
} 

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 
     Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
     kicked = false; 
     pay = false; 
     for (int i = 1; i <= 3; i++) 

      Debug.Log ("$$$$$$$$$"); 
    } 
} 
+3

'i> = 3;' devrait être 'i <= 3;'. C'est "continuer pendant que c'est vrai", pas "arrêter quand c'est vrai". – Blorgbeard

+0

oh à droite. sry j'ai oublié de le remettre. Je suis arrivé à un point où j'essayais des combinaisons aléatoires. merci –

+0

Ne changez pas votre question pour montrer le code source corrigé. Cela le rend inutile. – abto

Répondre

0
public GameObject deathFlamePrefab; 
private bool flamer; 
private bool pay = false; 
private bool broke = false; 
private int kickedCount = 0; 

void Start() 
{ 
    anim = GetComponent<Animator>(); 
    rb = GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Looted(); 
} 

public void OnTriggerEnter2D(Collider2D other) 
{ 
    if (!kicked && other.gameObject.tag == "kickIndicator") { 
     kicked = true; 
     transform.Translate (0.0f, .05f, 0.0f); 
    } 
} 

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 

     kicked = false; 

     if (kickedCount < 3) 
     { 
      Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
      kickedCount++; 
     } 
     pay = false; 
    } 
} 

Am incertain quant à ce que pay fait, mais vous pouvez avoir besoin pour placer cela dans l'instruction if

+0

instancie encore plus de 3 fois. Fondamentalement, le joueur donne un coup de pied à un cadavre et une pièce sort. Je veux que le joueur ne puisse plus ramasser des pièces du corps après que le joueur a donné trois coups de pied au cadavre. –

+0

Donc 1 pièce par coup de pied? – SDSMTKyzer

+1

c'est correct mon bonhomme. –

1

Essayez ceci:

public void Looted() 
{ 
    if (!pay && kicked) { 

     pay = true; 
     Instantiate (coinPrefab, coinSpawn.position, coinSpawn.rotation); 
     kicked = false; 
     pay = false; 
     for (int i = 1; i <= 3; i++) 
     {  
      Debug.Log ("$$$$$$$$$"); 
     } 
    } 
} 

voir la différence dans l'état for. Pensez-y comme "faire cette boucle aussi longtemps que cette condition est vraie." Depuis i commence à un et est incrémenté à la fin de l'instruction i++, cela fonctionnera trois fois comme prévu.

Il est plus fréquent et idiomatiques pour dire

for (int i = 0; i < 3, i++) 

moins qu'il y ait une raison particulière dont vous avez besoin pour compter à partir de 1.

+0

bon à savoir. C'est toujours le cas. Il instancie toujours les pièces chaque fois que le salaire est vrai. Merci pour l'info si –