Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Banoukill
Messages : 58
Inscription : 13 Avr 2015 20:16

Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Message par Banoukill » 25 Août 2015 11:34

Bonjour,

Je tente de faire un script pour faire rebondir une balle sur une platforme. Facile me diriez-vous, mais depuis de jour je bute sur un problème.

Le code

Code : Tout sélectionner

#pragma strict

var Rebondissement = 0.0;
var maxvelocneg = 0.0;
var VELOC = 0.0;

function Start () {}

function Update () {
	while (VELOC != maxvelocneg) {
		VELOC = GetComponent.<Rigidbody2D>().velocity.y - 1;
	}
}

function OnCollisionStay2D(coll: Collision2D){
	VELOC = Rebondissement;
}
Rebondissement est la valeur de l'inertie qui sera ajouté quand la balle touche la plateforme
maxvelocneg est la valeur d'inertie négative (qui attire vers le bas) maximale, le programme n'as pas le droit de dépasser cette valeur
VELOC est la variable où je stocke la valeur de l'inertie y pour éviter d'aller la chercher à chaque fois

Quand la balle touche la plateforme son inertie est = à Rebondissement est diminue jusqu’à maxvelocneg. SAUF qu'il y a aucune erreur de compilation mais quand je le test sur unity le jeu ne se lance et unity crashe.

Ce script marchait très bien jusqu'à l'arrivé de maxvelocneg (donc sans le while dans l'update)

J'ai tenté de parvenir au résultat de diverse manière même en ajustant la gravité pour rester à maxvelocneg mais à chaque fois le même BUG !!!

Avez-vous une idée ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Message par boubouk50 » 25 Août 2015 11:52

Code : Tout sélectionner

while (VELOC != maxvelocneg) {
      VELOC = GetComponent.<Rigidbody2D>().velocity.y - 1;
   }
Effectivement, ce bout de code a été interdit par la convention de Genève en 1985 pour atteinte aux droits de l'Homme.

Ce qu'il fait:
Tant que VELOC est différent de maxvelogneg alors je boucle sur la même ligne
-> VELOC = Vélocité - 1.
Sachant que Vélocité et -1 sont des constantes à ce moment précis (puisque la vélocité n'est pas modifiée par quoique ce soit) alors le résultat est une constante. Donc VELOC vaudra toujours une valeur différente de maxvelocneg. Et si par chance, tu tombes pile poil au 1er Update sur VELOC = maxvelocneg, alors la frame suivante, il le sera surement pas. Et si c'est la cas pour toutes les frames, alors cela veut dire que la vélocité est constante et vaut maxveloneg +1.

Donc cette boucle n'est pas ce que tu veux faire. Il faut la penser différemment. Utilise l'Update () à meilleur escient, en virant cette boucle par exemple.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Max
Messages : 8807
Inscription : 30 Juil 2011 13:57
Contact :

Re: Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Message par Max » 25 Août 2015 11:57

+1

Les Whiles dans Update, humm humm, comme dirait l'autre :mrgreen:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Banoukill
Messages : 58
Inscription : 13 Avr 2015 20:16

Re: Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Message par Banoukill » 25 Août 2015 12:16

Merci de vos réponses.

J'ai un peu modifié

Code : Tout sélectionner

function Update () {
	GetComponent.<Rigidbody2D>().velocity.y = GetComponent.<Rigidbody2D>().velocity.y - 1;
	if (VELOC == maxvelocneg - 1) {
		VELOC = maxvelocneg;
	}
}
Mais maintenant le jeu est super lent et la vélocité met des plombes à redescendre à maxvelocneg ce qui fait que la balle s'envole beaucoup plus :(

Que faire ?

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Script rebondisement balle fait maison - BLOQUAGE et pétage de cable :)

Message par boubouk50 » 25 Août 2015 13:41

On va faire simple:
Va faire des tutos de prog pour les bases parce que là c'est tout aussi bancal.

Code : Tout sélectionner

function Update () {
   //Il ne faut pas trop jouer avec la vélocité, mais plutôt utiliser addForce()
   GetComponent.<Rigidbody2D>().velocity.y = GetComponent.<Rigidbody2D>().velocity.y - 1;
   //Si VELOC n'est affecté nulle part ailleurs, cette condition est totalement inutile. sinon elle est juste inutile. Accessoirement VELOC et maxvelocneg sont des floats, alors les comparaisons...
   if (VELOC == maxvelocneg - 1) {
      VELOC = maxvelocneg;
   }
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Verrouillé

Revenir vers « (Js) Javascript »