Erro no script no jogo aqui, Ajuda, por favor!
2 participantes
Página 1 de 1
Erro no script no jogo aqui, Ajuda, por favor!
Alguem consegue me ajudar, está dando um erro aqui no meu jogo, estou tentando fazer um pacman! e vem esse erro, ele fica em looping nesse erro e não sei o que pode ser:
InvalidOperationException: Queue empty.
System.Collections.Generic.Queue`1[T].ThrowForEmptyQueue () (at <ae22a4e8f83c41d69684ae7f557133d9>:0)
System.Collections.Generic.Queue`1[T].Peek () (at <ae22a4e8f83c41d69684ae7f557133d9>:0)
FantasmaMovimento.MoveToWaypoint (System.Boolean loop) (at Assets/Scripts/FantasmaMovimento.cs:312)
FantasmaMovimento.Scatter () (at Assets/Scripts/FantasmaMovimento.cs:287)
FantasmaMovimento.FixedUpdate () (at Assets/Scripts/FantasmaMovimento.cs:68)
script ai
InvalidOperationException: Queue empty.
System.Collections.Generic.Queue`1[T].ThrowForEmptyQueue () (at <ae22a4e8f83c41d69684ae7f557133d9>:0)
System.Collections.Generic.Queue`1[T].Peek () (at <ae22a4e8f83c41d69684ae7f557133d9>:0)
FantasmaMovimento.MoveToWaypoint (System.Boolean loop) (at Assets/Scripts/FantasmaMovimento.cs:312)
FantasmaMovimento.Scatter () (at Assets/Scripts/FantasmaMovimento.cs:287)
FantasmaMovimento.FixedUpdate () (at Assets/Scripts/FantasmaMovimento.cs:68)
script ai
- Código:
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class FantasmaMovimento : MonoBehaviour
{
private Vector3 caminho;
private Queue<Vector3> caminhosIA;
public Vector3 _movimento;
public Vector3 movimento
{
get
{
return _movimento;
}
set
{
_movimento = value;
Vector3 pos = new Vector3((int)transform.position.x, (int)transform.position.y, (int)transform.position.z);
caminho = pos + _movimento;
}
}
public float velocidade = 0.3f;
public float TempoAssustado = 5f;
public float TempoEsperar = 0.0f;
private float TempoFinalAssustado;
private float TempoFinalEsperar;
enum State { Wait, Init, Scatter, Chase, Run };
State state;
private Vector3 _PosicaoInicial;
private float _TempoBranco;
private float _TempoAlternarBranco;
private float _IntervaloAlternado;
private bool Branco = false;
public InterfaceNavegacao GUINav;
public ControleJogador pacman;
private GameManager _gm;
void Start()
{
_gm = GameObject.Find("Game Manager").GetComponent<GameManager>();
_IntervaloAlternado = _gm.TempoAssustado * 0.33f * 0.20f;
InicialFantasma();
}
public float DISTANCE;
void FixedUpdate()
{
DISTANCE = Vector3.Distance(transform.position, caminho);
if (GameManager.EstadoJogo == GameManager.GameState.Jogo)
{
animate();
switch (state)
{
case State.Wait:
Wait();
break;
case State.Init:
Init();
break;
case State.Scatter:
Scatter();
break;
case State.Chase:
ChaseAI();
break;
case State.Run:
RunAway();
break;
}
}
}
public void InicialFantasma()
{
_PosicaoInicial = getStartPosAccordingToName();
caminho = transform.position;
state = State.Wait;
TempoFinalEsperar = Time.time + TempoEsperar + GUINav.DelayInicial;
InicializarCaminhosIA(state);
}
public void InicialFantasma(Vector3 pos)
{
transform.position = pos;
caminho = transform.position;
state = State.Wait;
TempoFinalEsperar = Time.time + TempoEsperar + GUINav.DelayInicial;
InicializarCaminhosIA(state);
}
private void InicializarCaminhosIA(State st)
{
string data = "";
switch (name)
{
case "vermelho":
data = @"22 20
22 26
27 26
27 30
22 30
22 26";
break;
case "rosa":
data = @"14.5 17
14 17
14 20
7 20
7 26
7 30
2 30
2 26";
break;
case "azul":
data = @"16.5 17
15 17
15 20
22 20
22 8
19 8
19 5
16 5
16 2
27 2
27 5
22 5";
break;
case "amarelo":
data = @"12.5 17
14 17
14 20
7 20
7 8
7 5
2 5
2 2
13 2
13 5
10 5
10 8";
break;
}
string line;
caminhosIA = new Queue<Vector3>();
Vector3 wp;
if (st == State.Init)
{
using (StringReader reader = new StringReader(data))
{
while ((line = reader.ReadLine()) != null)
{
if (line.Length == 0) break;
string[] values = line.Split(' ');
float x = float.Parse(values[0]);
float y = float.Parse(values[1]);
wp = new Vector3(x, y, 0);
caminhosIA.Enqueue(wp);
}
}
}
if (st == State.Scatter)
{
bool scatterWps = false;
using (StringReader reader = new StringReader(data))
{
while ((line = reader.ReadLine()) != null)
{
if (line.Length == 0)
{
scatterWps = true;
continue;
}
if (scatterWps)
{
string[] values = line.Split(' ');
int x = Int32.Parse(values[0]);
int y = Int32.Parse(values[1]);
wp = new Vector3(x, y, 0);
caminhosIA.Enqueue(wp);
}
}
}
}
if (st == State.Wait)
{
Vector3 pos = transform.position;
if (transform.name == "azul" || transform.name == "amarelo")
{
caminhosIA.Enqueue(new Vector3(pos.x, pos.y - 0.5f, 0f));
caminhosIA.Enqueue(new Vector3(pos.x, pos.y + 0.5f, 0f));
}
else
{
caminhosIA.Enqueue(new Vector3(pos.x, pos.y + 0.5f, 0f));
caminhosIA.Enqueue(new Vector3(pos.x, pos.y - 0.5f, 0f));
}
}
}
private Vector3 getStartPosAccordingToName()
{
switch (gameObject.name)
{
case "vermelho":
return new Vector3(15f, 20f, 0f);
case "rosa":
return new Vector3(14.5f, 17f, 0f);
case "azul":
return new Vector3(16.5f, 17f, 0f);
case "amarelo":
return new Vector3(12.5f, 17f, 0f);
}
return new Vector3();
}
void animate()
{
Vector3 dir = caminho - transform.position;
GetComponent<Animator>().SetFloat("DirecaoX", dir.x);
GetComponent<Animator>().SetFloat("DirecaoY", dir.y);
GetComponent<Animator>().SetBool("Correr", false);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.name == "pacman")
{
if (state == State.Run)
{
Normal();
InicialFantasma(_PosicaoInicial);
pacman.AtualizarPlacar();
}
else
{
_gm.PerderVida();
}
}
}
void Wait()
{
if (Time.time >= TempoFinalEsperar)
{
state = State.Init;
caminhosIA.Clear();
InicializarCaminhosIA(state);
}
MoveToWaypoint(true);
}
void Init()
{
_TempoBranco = 0;
if (caminhosIA.Count == 0)
{
state = State.Scatter;
string name = GetComponent<SpriteRenderer>().sprite.name;
if (name[name.Length - 1] == '0' || name[name.Length - 1] == '1') movimento = Vector3.right;
if (name[name.Length - 1] == '2' || name[name.Length - 1] == '3') movimento = Vector3.left;
if (name[name.Length - 1] == '4' || name[name.Length - 1] == '5') movimento = Vector3.up;
if (name[name.Length - 1] == '6' || name[name.Length - 1] == '7') movimento = Vector3.down;
InicializarCaminhosIA(state);
TempoFinalAssustado = Time.time + TempoAssustado;
return;
}
MoveToWaypoint();
}
void Scatter()
{
if (Time.time >= TempoFinalAssustado)
{
caminhosIA.Clear();
state = State.Chase;
return;
}
MoveToWaypoint(true);
}
void ChaseAI()
{
if (Vector3.Distance(transform.position, caminho) > 0.000000000001)
{
Vector2 p = Vector2.MoveTowards(transform.position, caminho, velocidade);
GetComponent<Rigidbody2D>().MovePosition(p);
}
else GetComponent<InteligenciaArtifical>().LogicaMovimentacao();
}
void RunAway()
{
GetComponent<Animator>().SetBool("Correr", true);
if (Time.time >= _TempoBranco && Time.time >= _TempoAlternarBranco) AlternarBrancoAzul();
if (Vector3.Distance(transform.position, caminho) > 0.000000000001)
{
Vector2 p = Vector2.MoveTowards(transform.position, caminho, velocidade);
GetComponent<Rigidbody2D>().MovePosition(p);
}
else GetComponent<InteligenciaArtifical>().LogicaCorrida();
}
void MoveToWaypoint(bool loop = false)
{
caminho = caminhosIA.Peek();
if (Vector3.Distance(transform.position, caminho) > 0.000000000001)
{
_movimento = Vector3.Normalize(caminho - transform.position);
Vector2 p = Vector2.MoveTowards(transform.position, caminho, velocidade);
GetComponent<Rigidbody2D>().MovePosition(p);
}
else
{
if (loop) caminhosIA.Enqueue(caminhosIA.Dequeue());
else caminhosIA.Dequeue();
}
}
public void Assustado()
{
state = State.Run;
_movimento *= -1;
_TempoBranco = Time.time + _gm.TempoAssustado * 0.66f;
_TempoAlternarBranco = _TempoBranco;
GetComponent<Animator>().SetBool("CorrerBranco", false);
}
public void Normal()
{
if (state != State.Run) return;
caminhosIA.Clear();
state = State.Chase;
_TempoAlternarBranco = 0;
_TempoBranco = 0;
GetComponent<Animator>().SetBool("CorrerBranco", false);
GetComponent<Animator>().SetBool("Correr", false);
}
public void AlternarBrancoAzul()
{
Branco = !Branco;
GetComponent<Animator>().SetBool("CorrerBranco", Branco);
_TempoAlternarBranco = Time.time + _IntervaloAlternado;
}
}
lucaspoiob- Membro
- PONTOS : 2851
REPUTAÇÃO : 0
Respeito as regras :
Re: Erro no script no jogo aqui, Ajuda, por favor!
Só colar sem formatação.
CShar- MembroAvançado
- PONTOS : 1647
REPUTAÇÃO : 11
Idade : 26
Respeito as regras :
Re: Erro no script no jogo aqui, Ajuda, por favor!
Dificilmente alguém vai responder essa pergunta porque são muitas referências que não temos.
Mas penso que talvez você tenha iniciado o queue de forma incorreta. Tente usar algum valor númerico no lugar de um nome para constar como empty.
E teste seu código por partes. Parte por parte até colar em uma que está o erro. Aí você posta.
Mas penso que talvez você tenha iniciado o queue de forma incorreta. Tente usar algum valor númerico no lugar de um nome para constar como empty.
E teste seu código por partes. Parte por parte até colar em uma que está o erro. Aí você posta.
CShar- MembroAvançado
- PONTOS : 1647
REPUTAÇÃO : 11
Idade : 26
Respeito as regras :
Tópicos semelhantes
» Me ajuda aqui pro favor
» AJUDA POR FAVOR (ERRO DE CACHE)
» Alguém ajuda com um erro por favor? PSDImporter.cs
» ALGUEM PODE ME DAR UMA AJUDA AQUI COM UM SCRIPT??
» Alguém me ajuda em meu jogo de quiz aqui ?
» AJUDA POR FAVOR (ERRO DE CACHE)
» Alguém ajuda com um erro por favor? PSDImporter.cs
» ALGUEM PODE ME DAR UMA AJUDA AQUI COM UM SCRIPT??
» Alguém me ajuda em meu jogo de quiz aqui ?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos