Почему единство «случайно» делает мои объекты нулевыми / заявляющими, что они уничтожены?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему единство «случайно» делает мои объекты нулевыми / заявляющими, что они уничтожены?

Сообщение Anonymous »

Иногда я могу играть в свою игру целый путь без проблем, нажимая все одинаковые кнопки и запустив все один и тот же код, что и в других случаях (насколько я знаю). Тем не менее, иногда я получаю ошибку, на которую я нажимаю на «Спрайт», «я был уничтожен, но [я] все еще пытаюсь получить к нему», но, кажется, нет шаблона в этом поведении. < /P>
Я искал каждый раз, когда «уничтожить» происходит во всем моем коде и не могу найти ни одного обстоятельства, когда это будет уничтожать каждый спрайт (мои кнопки пользовательского интерфейса в порядке). < /P>
Я понимаю на бумаге, я, очевидно, должен просто уничтожить все спрайты, но я не могу сказать, почему это происходит так нерегулярно /«случайным образом», если это так.
Кроме того, когда я намеренно уничтожаю свои объекты, они Больше не видно на экране, тогда как в этих обстоятельствах они все еще есть. i.sstatic.net/ddp5kma4.png " />
В конкретном случае изображения я уже несколько раз сбросил колоду без проблем, несмотря на сброс колоды, вызывая проблему в других попытках игры (без кода. Изменение с тех пор), но ошибка была вызвана здесь уничтожением возврата, что также не вызывает проблему каждый раз). < /p>
Я помещаю печатные операторы после своих уничтожений (после копирования после копирования Код здесь) и, похоже, оба случая вызова уничтожения, которые вызывают его, но я не понимаю, почему
a) Проблема не возникает каждый раз, когда
b) он разрушает Карты, карты которых не помечают «Deckbutton» в DealFromDeck
c), объекты все еще «уничтожены», даже если они снова создаются все сначала < /p>
Здесь каждый метод Включает в себя «Уничтожить» в моем коде.public void DealFromDeck()
{
float xOffset = 1.7f;
string card;
UpdateSprite[] allCards = FindObjectsOfType();
if (deckLocation < (deck.Count))//Can't increment it if at end of deck
{
card = deck[deckLocation];
}
else//Reset when at end of deck
{
//Erase deck button children
foreach (UpdateSprite allCard in allCards)
{
if (allCard.transform.parent != null)
{
if (allCard.transform.parent.CompareTag("DeckButton"))
{
Destroy(allCard.gameObject);
}
}
}

deckLocation = 0;
deckZOffset = 0;
card = deck[deckLocation];
}
GameObject newCard = Instantiate(cardPrefab, new Vector3(deckButton.transform.position.x + xOffset, deckButton.transform.position.y, deckButton.transform.position.z - deckZOffset), Quaternion.identity, deckButton.transform);
newCard.transform.localScale = new Vector3(15, 15, 0);
newCard.GetComponent().sortingOrder = deckLocation;
newCard.name = card;
newCard.GetComponent().faceUp = true;
deckLocation++;
deckZOffset += 0.02f;
}
< /code>
Возврат лица (в моей игре пользователь может вернуть все карты лица на палубу, чтобы раскрыть новые) < /p>
public void ReturnFaceUps()//Button deckButton)
{
UpdateSprite[] cards = FindObjectsOfType();

//Lose 20 points for a reset if not needed
if(!cantMove)
{
game.score -= 20;
}

//Put face up cards back into deck
foreach (UpdateSprite card in cards)
{
Selectable cardAttr = card.GetComponent();
if (!cardAttr.inDeck && cardAttr.faceUp)//Face up tableau cards
{
foreach(List tableau in game.tableaus)
{
if (tableau.Contains(cardAttr.name))
{
tableau.Remove(cardAttr.name);
}
}
game.deck.Add(cardAttr.name);
}
}

//Reset deck offset
game.deckZOffset = 0;

//Delete all
foreach (UpdateSprite card in cards)
{
if (!card.CompareTag("DeckButton") && !card.CompareTag("Help") && !(card.name==("Card")))//Don't destroy deck button, help button or card prefab
{
Destroy(card.gameObject);
}
}

game.DealCards();
}
< /code>
Это не разрушает, но это то, что вызовы returnfaceups, и вы можете увидеть его в любом случае создания новых объектов.
Cards Deal Cards Tableau: < /p>
public void DealCards()
{
for (int i = 0;i

Подробнее здесь: https://stackoverflow.com/questions/794 ... -destroyed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»