[RESOLU] [JS] ...Does not support slicing

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

[RESOLU] [JS] ...Does not support slicing

Message par FabienTT » 16 Juil 2013 01:50

Bonjour à tous !

J'imagine que vous avez très probablement déjà vu ce message d'erreur, que j'ai utilisé comme titre de mon sujet.
Avant de venir poster ici j'ai fais le tour des forums sans trouver de solution à mon problème.

Dans un premier lieu, j'ai la fonction suivante où l'argument Neighboors est un List.<Collider> dans lequel sont stockés les Collider issus d'un : Physics.OverlapSphere(this.transform.position, 5)
Pas directement toutefois, au travers une boucle je ne récupère que les Colliders dont le Tag m'intéresse, et les dispose dans ma Liste "Neighboors". (qui s'écrit normalement neighbour mais je préfère avec deux o.=)

Code : Tout sélectionner

function AskForCrowd(Neighboors) {

	if(!CrowdAsked)
	{
		CrowdAsked = true; //Evite que la création de plusieurs foules soit demandée simultanément.
			
		var KeptIndividuals : List.<Collider> = new List.<Collider>(); //Liste contenant tous les individus destinés à appartenir à cette foule.
		
		Debug.Log("SBM : crowd asked");
		Debug.Log("SBM : First neighboor before testing : " + Neighboors[0]);  
										
			KeptIndividuals = TestNeighboors(Neighboors,KeptIndividuals); 
		
			
	}
	else
	{
		Debug.Log("SBM : one crowd at a time !");
	}


}
La fonction TesTNeighboors doit vérifier sir les Colliders présents dans la liste Neighboors le sont également dans la liste KeptIndividuals, l'idée étant de faire passer plusieurs liste de "voisins", un voisin pouvant avoir des voisins communs je veux juste conserver une instance de chaque voisin dans ma liste KeptIndividuals (je galère un peu d'ailleurs, mais c'est pas la question).

Code : Tout sélectionner

function TestNeighboors(Neighboors,KeptNeighboors){

	var found : boolean = false;
	
	Debug.Log("SBM : first Neighboor :" + Neighboors[0] );
	//Debug.Log("SBM : Kepts length :" + Kepts.Count);
	
	
	if((KeptNeighboors as List.<Collider>).Count == 0) //Si la liste des voisins connectés est vide, il est inutile de vérifier si les nouveaux voisins sont présents dans cette liste.
	{
		KeptNeighboors = Neighboors; //La liste des voisins connectés récupère tous les voisins proposés.
	}
	else //Sinon, il faut regarder pour chaque Neighboors, si ils appartiennent déjà à KeptNeighboors ou non.
	{
	
		//Kepts.Concat(KeptNeighboors);
	
		for(var Indiv : Collider in Neighboors) //Pour chaque individu dans Neighboors...
		{
			
			found = false; //...Considéré qu'il n'est pas trouvé
			
			for(var i : int = 0; i < (KeptNeighboors as List.<Collider>).Count; i++) //Pour chaque voisin
			{
				
				if(Indiv.GetInstanceID() == KeptNeighboors[i].GetInstanceID()) //Si l'individu testé est présent dans la liste des individus gardés
				{
					found = true; // alors il a déjà été trouvé, ne pas s'en occuper donc.
					i = (KeptNeighboors as List.<Collider>).Count; //Travail de porc, permet de ne pas perdre de temps dans la boucle à vérifier les autres voisins.
				}
				
				if(found == false) //Sinon
				{
					(KeptNeighboors as List.<Collider>).Add(Indiv); //Le rajouter à la liste des individus gardés
					Debug.Log("SBM : IndivAsked"); //Indique qu'un individu a été rajouté.
					
				}
								
			}
		}	
	}
	
	
	Debug.Log("SBM : first of Kepts :" + KeptNeighboors[0]);
	
	return KeptNeighboors;
}

En l'état, rien ne marche ; mais c'est pas tellement le soucis ;
la ligne : if(Indiv.GetInstanceID() == KeptNeighboors.GetInstanceID())
m'engendre l'erreur : Assets/SBM/SBM.js(163,61): BCE0048: Type 'Object' does not support slicing.

J'ai trouvé de nombreuses explications : c'est parce que Unity croit que je fais mal, c'est parce que j'utilises des Array (alors je suis passé aux Lists), c'est parce que il y a #Pragma Strict en haut de ton code...
Certes, sans le Pragma strict je n'ai pas d'erreur à la compile, mais j'aimerai mieux résoudre le problème d'une façon plus formelle si possible.
Est-ce possible ? Qu'est ce que j'ai encore fais comme connerie ? =)

P.S: toute erreur/maladresse dans mon code est bien entendu ouverte à la critique et aux suggestions.

Encore merci,

Fab.
Dernière édition par FabienTT le 16 Juil 2013 18:02, édité 1 fois.

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [JS] ...Does not support slicing

Message par cayou66 » 16 Juil 2013 02:47

Salut,
il faut caster en JS pour faire ça je pense.
J'ai pas tout suivi du code mais tu dois entourer ton accès au tableau avec un cast, c'est la pourriture du JS qui veut ça.
Raison de plus de passer au C# sincèrement...

Code : Tout sélectionner

((...)KeptNeighboors[i])

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [JS] ...Does not support slicing

Message par artemisart » 16 Juil 2013 10:53

Salut,
N'oublie pas de TOUT typer (tu as oublié les paramètres des méthodes) et ajoute #pragma strict au début du code.
et +1 pour le C#

Avatar de l’utilisateur
krys64
Fondateur unity3d-france
Fondateur unity3d-france
Messages : 471
Inscription : 26 Nov 2009 00:08

Re: [JS] ...Does not support slicing

Message par krys64 » 16 Juil 2013 14:36

Je pense que dans ta ligne :
if(Indiv.GetInstanceID() == KeptNeighboors.GetInstanceID())
il faut typer KeptNeighboors genre :

Code : Tout sélectionner

var _neighboor:tonType=KeptNeighboors[i] as tonType;
ce qui donne :

Code : Tout sélectionner

 if(Indiv.GetInstanceID() == _neighboor.GetInstanceID())

FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

Re: [JS] ...Does not support slicing

Message par FabienTT » 16 Juil 2013 14:57

Plop !

En effet, j'ai procédé comme vous dites, notamment comme Krys le suggère et cela règle le problème du slicing, et j'ai également typé les paramètres de mes fonctions ce qui semble avoir réglé quelques désagréments.

Merci beaucoup pour votre efficacité.

J'ai un autre problème qui vient de surgir, en avançant dans le code, mais je vais essayer de le comprendre et de le régler moi même avant de vous solliciter.


Passer au C# semble effectivement judicieux, cependant je suis pris par le temps et j'ai peur de me perdre dans la conversion de mes scripts JS vers C#(environ 5000 lignes ce qui ne représente peut être pas grand chose pour vous, mais beaucoup pour moi... ^^) et d'y laisser du temps. J'ai une première étape importante fin septembre où je dois remettre mon manuscrit avec un maximum d'annexes. Ensuite je peux programmer librement jusqu'à ma soutenance mi novembre. En sachant que je ne fais que ça de mes journées de travail.

Au final, je ne vois que des critiques au sujet du JS par rapport au C#, quel est donc l'intérêt du JS ?

Encore merci en tout cas !

Fabien.

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [JS] ...Does not support slicing

Message par cayou66 » 16 Juil 2013 15:10

Aucun !
*Feed The Troll*

Avatar de l’utilisateur
spedy
Messages : 290
Inscription : 16 Nov 2010 16:32
Localisation : Aix en Provence

Re: [JS] ...Does not support slicing

Message par spedy » 16 Juil 2013 15:20

Même si le c# est un choix plus judicieux dans le développement de ton jeu le javascript n'est pas un paria.

Certaine personne venant principalement du web ( html, js, as3, php ) auront plus de facilité à utiliser le javascript que le c#.

Pour un particulier le choix ce fait en fonction de tes compétences, tes acquis, et peut être tes objectifs.
Dans le cas d'un entreprise ( jeu, serious games, com, ... ) le choix peux ce porter sur le Javascript en fonction des ressources ( dev ) disponible et de leur compétences.

Même si beaucoup préfère ( à juste titre ou non ) le c#. Le Javascript reste un choix acceptable, et tu ne sera pas lapider en public pour cela.

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: [JS] ...Does not support slicing

Message par cayou66 » 16 Juil 2013 16:10

Ah si, moi je lui lance des tomates !

sephitoth
Messages : 495
Inscription : 06 Avr 2012 13:47
Localisation : toulouse

Re: [JS] ...Does not support slicing

Message par sephitoth » 16 Juil 2013 16:50

moi je lancerais des noix de coco, les tomates s'est trop moelleux !!!! :lol:
J'étais athée jusqu’à ce que je découvre que j'étais dieu !

FabienTT
Messages : 67
Inscription : 06 Fév 2013 14:58

Re: [JS] ...Does not support slicing

Message par FabienTT » 16 Juil 2013 17:04

J'ai fais le choix du JS parce qu'en C# c'est trop simple : ça fonctionne tout le temps, il n'y a pas de problèmes à contourner, alors qu'au moins en JS on a plein d'emmerdes. Et je sais que je peux compter sur vous pour m'aider à les résoudre =D


Je vais voir si je peux me réorienter vers le C# mais cela sera à partir de septembre, d'ici là je préfère avancer exclusivement sur mes travaux.

Répondre

Revenir vers « Scripting »