2016-10-07 1 views
0

Я пытаюсь получить число от 0 до 3. Я пытаюсь выполнить итерацию через счетчик и каждые 5 кликов на кнопке, он вызывает метод , но я не могу понять это. Я пробовал разные способы сделать это. Если бы я мог получить некоторые подсказки о том, как завершить это, пожалуйста, дайте мне знать. Если вам нужна другая информация, тогда дайте мне знать. Благодаря!C# единицу конвертирует итерированный номер в число рядов по числу нажатий

using UnityEngine; 
using UnityEngine.UI; 
using System; 
using System.Threading; 

public class ButtonClick : MonoBehaviour { 

    private Vector3 starPos; 
    private int starCounter; 
    private int[] starTypes; 
    private int totalStarTypes = 4; 

    public Button button; 
    public UnityEngine.UI.Text starCounterText; 

    private Image starImage; 

    // Use this for initialization 
    void Start() { 
     starTypes = new int[totalStarTypes]; 
    } 

    void Update(){ 
     if (Input.GetMouseButtonDown (0)) { 
      starCounter++; 
     } 

     for (int i = 0; i < starCounter; i++) { 
      int j = i; 
      int type = (j % 5); 
      if (type == 0) { 
       //SpawnStar (j%5); 
      } 
     } 
    } 

    // Update is called once per frame 
    public void UpdateStar() { 
     starCounterText.text = "Star Counter: " + starCounter; 
    } 

    public void SpawnStar(int type){ 
     if (type == 0) { 
      Debug.Log ("White Star Spawned!"); 
     } 
     if (type == 1) { 
      Debug.Log ("Red Star Spawned!"); 
     } 
     if (type == 2) { 
      Debug.Log ("Yellow Star Spawned!"); 
     } 
     if (type == 3) { 
      Debug.Log ("Blue Star Spawned!"); 
     } 
    } 
} 
+0

Что определяет, какую звезда нерестится? Является ли он итеративным? Случайные? Какой-то другой определяющий фактор? – Abion47

+0

За каждый клик счетчик добавляется 1 (уже обработан), и за каждые 5 кликов он порождает звезду. Таким образом, любое целое число обрабатывает логику 5-го щелчка (например, j или тип, возможно, все еще не работает) вызывает функцию для появления типа (int) звезды. Также я добавлю случайное в него, как только я получу основы. Теперь только итерация над счетчиком, в котором обрабатывается логика, определяет, какой тип звезды порожден. Может быть, я должен использовать, как List, перебирать список и получать случайный int из этого? –

+0

Вам не нужны списки, массивы или циклы. Это можно сделать с помощью простой математики. Помните принцип KISS. – Abion47

ответ

-1

Ваш код будет порождать все звезды в каждом кадре после 5-го щелчка.

Попробуйте это, он будет порождать одну звезду, когда вы нажимаете, и только тот, который вы хотели создать.

  • ИНТ starCounter будет обрабатывать какую звезду на нерест
  • BOOL executeSpawn будет обрабатывать, когда на нерест звезды

using UnityEngine; 
using UnityEngine.UI; 
using System; 
using System.Threading; 

public class ButtonClick : MonoBehaviour { 

    private Vector3 starPos; 
    private int starCounter; 
    private bool executeSpawn; 
    private int[] starTypes; 
    private int totalStarTypes = 4; 

    public Button button; 
    public UnityEngine.UI.Text starCounterText; 

    private Image starImage; 

    // Use this for initialization 
    void Start() { 
     starTypes = new int[totalStarTypes]; 
    } 

    void Update(){ 
     if (Input.GetMouseButtonDown (0)) { 
      starCounter++; 
      executeSpawn = true; 
     } 

     if(executeSpawn) { 
      SpawnStar (i % 5); 
      executeSpawn = false; 
     } 
    } 

    // Update is called once per frame 
    public void UpdateStar() { 
     starCounterText.text = "Star Counter: " + starCounter; 
    } 

    public void SpawnStar(int type){ 
     if (type == 0) { 
      Debug.Log ("White Star Spawned!"); 
     } 
     if (type == 1) { 
      Debug.Log ("Red Star Spawned!"); 
     } 
     if (type == 2) { 
      Debug.Log ("Yellow Star Spawned!"); 
     } 
     if (type == 3) { 
      Debug.Log ("Blue Star Spawned!"); 
     } 
    } 
} 
+0

Этот код будет порождать звезду при каждом нажатии. – Abion47

+0

Правильно, глядя, что делает функция «SpawnStar», казалось бы, это то, что требуется. Я отредактирую ответ, чтобы отразить это –

+0

Во-первых, OP конкретно заявляет, что звезда должна появляться каждые 5 кликов. Во-вторых, этот код может вызывать «SpawnStar» с параметром 4, который ничего не сделает. В-третьих, если цель * была * порождать звезду при каждом нажатии, булевский флаг является избыточным. – Abion47

1
Random r = new Random(); 

void Update() 
{ 
    if (Input.GetMouseButtonDown(0)) 
    { 
     starCounter = (starCounter + 1) % 5; 
     if (starCounter == 0) SpawnStar(r.Next(0, 4)); 
    } 
} 
+0

Спасибо вам большое! –