Probleme de calcul en as 3.0

Résolu
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011 - 10 déc. 2009 à 03:49
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011 - 16 déc. 2009 à 10:57
Bonsoir, je prépare une anime qui me permettrais de calculer des moyennes via une zone de saisie et un tableau mais je n'arrive pas a faire la somme des entrées du tableau, au lieu de cela les entrées sont mises cote a cote....

Il y a 2 bouton sur la scène et 2 zone texte, je les remplacerais par des scripts, mais je veux d'abord régler le soucis du calcul
si certain d'entre vous on un peu de temps a m'offrir, je vous en serrais très reconnaissant, je débute en as3.0, du coup je passe des heures a chercher sans résultat c'est pour cela que j'ose vous ennuyer avec mes problèmes, merci par avance....^^

var valeurPourMoyenne:Array = new Array();
//"entre"bouton sur l'anime pour valider la saisie
entre.addEventListener(MouseEvent.CLICK,miseAJourTableau);
//"egal"bouton sur l'anime pour obtenir le resultat
egal.addEventListener(MouseEvent.CLICK,calcul);

function miseAJourTableau(evt:Event)
{
//"saisie"Zone texte sur l'anime pour saisir les valeurs
valeurPourMoyenne.push(saisie.text);
//"affichageValeurCalcul"Zone texte sur l'anime pour afficher
affichageValeurCalcul.text = valeurPourMoyenne.toString();
}

function calcul(evt:Event)
{
trace( "valeur dans le tableau: "+valeurPourMoyenne );
var lng:int = valeurPourMoyenne.length;
trace("nombre de valeur: "+lng);
var total:Number = 0;

for (var i:Number = 0; i< lng; i++)
{
total += valeurPourMoyenne[i];
}

var moyenne = total/lng;
trace("totale: "+total);
trace("moyenne: "+moyenne);
}

11 réponses

crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
10 déc. 2009 à 07:44
salut, tu fais des push de texte dans ton tableau et tu effectues des calculs sur ces textes. il suffit donc de les transformer avant.
3
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
10 déc. 2009 à 13:39
oki, je comprend mieux pourquoi, les valeur sont donc cote a cote, pour les transformer en Number, je vais chercher comment faire.
merci, beaucoup pour cette réponse.
Bonne journée......^^
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
10 déc. 2009 à 13:51
Super, merci beaucoup crackter, j'ai cru que ta reponse allai me faire chercher encore longtemps, mais en faite c'est simple comme bonjours, vraiment c'est cool, je met la correction du code, j'ai juste crée une var Number qui renvoie au valeur du tableau....

si je puis me permettre, comme je débute, vous auriez pas quelques remarque a me faire sur l'écriture du code, comme la syntaxe ou une simplification du script, en tout cas un grand merci crackter.....^^

var valeurPourMoyenne:Array = new Array();
//"entre"bouton sur l'anime pour valider la saisie
entre.addEventListener(MouseEvent.CLICK,miseAJourTableau);
//"egal"bouton sur l'anime pour obtenir le resultat
egal.addEventListener(MouseEvent.CLICK,calcul);
function miseAJourTableau(evt:Event)
{
//"saisie"Zone texte sur l'anime pour saisir les valeurs
valeurPourMoyenne.push(saisie.text);
//"affichageValeurCalcul"Zone texte sur l'anime pour afficher
affichageValeurCalcul.text = valeurPourMoyenne.toString();
}

function calcul(evt:Event)
{
trace( "valeur dans le tableau: "+valeurPourMoyenne );
var lng:int = valeurPourMoyenne.length;
trace("nombre de valeur: "+lng);
var total:Number = 0;

for (var i:Number = 0; i< lng; i++)
{
var valeurNumber:Number = valeurPourMoyenne[i]
total += valeurNumber;
}

var moyenne = total/lng;
trace("totale: "+total);
trace("moyenne: "+moyenne);
}
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
10 déc. 2009 à 22:32
Bonsoir, je suis pas sur que sa intéresse beaucoup de monde, mais bon, j'ai fait des modifs sur mon script afin de n'avoir plus que du script, j'ai encore quelques idées a développer pour rendre l'interface plus pratique.

Encore un grand merci a tous pour le partage des connaissances et des codes...^^


//different etats du bouton
var up:MovieClip = new MovieClip()
up.graphics.beginFill(0x666666,1);
up.graphics.drawRect(550,20,50,50);
up.graphics.endFill();
var over:MovieClip = new MovieClip()
over.graphics.beginFill(0x333333, 1);
over.graphics.drawRect(550,20,50,50);
over.graphics.endFill();
var down:MovieClip = new MovieClip()
down.graphics.beginFill(0xcccccc, 1);
down.graphics.drawRect(550,20,50,50);
down.graphics.endFill();
//zones de texte
var valeurTexte:TextField = createCustomTextField(10, 10, 500, 60);
valeurTexte.type = TextFieldType.DYNAMIC;
valeurTexte.text = "valeurs";
var nombreValeurTexte:TextField = createCustomTextField(10, 85, 120, 20);
nombreValeurTexte.type = TextFieldType.DYNAMIC;
nombreValeurTexte.text = "nombre de valeurs";
var sommeValeurTexte:TextField = createCustomTextField(10, 120, 200, 20);
sommeValeurTexte.type = TextFieldType.DYNAMIC;
sommeValeurTexte.text = "somme des valeurs";
var resultatTexte:TextField = createCustomTextField(10, 155, 200, 20);
resultatTexte.type = TextFieldType.DYNAMIC;
resultatTexte.text = "resultats";
var saisie:TextField = createCustomTextField(10, 190, 50, 20);
saisie.type = TextFieldType.INPUT;
saisie.text = "";
//tableau
var valeurPourMoyenne:Array = new Array();
//bouton
var entre:SimpleButton = new SimpleButton(up, over, down, up)
addChild(entre)
//definition des parametres des zone de texte
function createCustomTextField(x:Number, y:Number, width:Number, height:Number):TextField
{
var result:TextField = new TextField();
result.x = x;
result.y = y;
result.width = width;
result.height = height;
result.background = true;
result.border = true;
addChild(result);
return result;
}
//ecouteur boutton
entre.addEventListener(MouseEvent.CLICK,miseAJourTableau);
entre.addEventListener(MouseEvent.CLICK,calcul);
//entre des donnees dans le tableau
function miseAJourTableau(evt:Event)
{
valeurPourMoyenne.push(saisie.text);
}
//calcul
function calcul(evt:Event)
{
addChild ( valeurTexte );
valeurTexte.text = "valeur dans le tableau: "+valeurPourMoyenne.toString();
var lng:int = valeurPourMoyenne.length;
addChild ( nombreValeurTexte );
nombreValeurTexte.text = "nombre de valeur: "+lng.toString();
var total:Number = 0;

for (var i:Number = 0; i< lng; i++)
{
var valeurNumber:Number = valeurPourMoyenne[i]
total += valeurNumber;
}

var moyenne = total/lng;
addChild ( sommeValeurTexte );
sommeValeurTexte.text = "somme des valeurs: "+total.toString();
addChild ( resultatTexte );
resultatTexte.text = "moyenne: "+moyenne.toString();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
11 déc. 2009 à 22:27
Bonsoir, je termine mon anime pour calculer des moyennes, tout en script et au clavier. Je pense que se script pourrait être largement optimisé, mais je n'est pas la connaissance suffisante pour mieux.

//formatage texte
var format:TextFormat = new TextFormat();
format.font = "Trebuchet MS";
format.color = 0xffffff;
format.size = 20;
//zones de textes
var valeurTexte:TextField = createCustomTextField(20, 20, 760, 300);
valeurTexte.defaultTextFormat = format;
valeurTexte.type = TextFieldType.DYNAMIC;
valeurTexte.text = "valeurs: ";
valeurTexte.multiline = true;
valeurTexte.wordWrap = true;
var nombreValeurTexte:TextField = createCustomTextField(20, 325, 760, 30);
nombreValeurTexte.defaultTextFormat = format;
nombreValeurTexte.type = TextFieldType.DYNAMIC;
nombreValeurTexte.text = "nombre de valeurs: ";
var sommeValeurTexte:TextField = createCustomTextField(20, 360, 760, 30);
sommeValeurTexte.defaultTextFormat = format;
sommeValeurTexte.type = TextFieldType.DYNAMIC;
sommeValeurTexte.text = "somme des valeurs: ";
var resultatTexte:TextField = createCustomTextField(20, 395, 760, 30);
resultatTexte.defaultTextFormat = format;
resultatTexte.type = TextFieldType.DYNAMIC;
resultatTexte.text = "resultats: ";
var texteInstruction:TextField = createCustomTextField(20, 430, 250, 60);
texteInstruction.defaultTextFormat = format;
texteInstruction.type = TextFieldType.DYNAMIC;
texteInstruction.text = "entrez vos valeurs ici ----> touche-Enter-pour valider";
texteInstruction.multiline = true;
texteInstruction.wordWrap = true;
var saisie:TextField = createCustomTextField(275, 430, 505, 30);
saisie.defaultTextFormat = format;
saisie.type = TextFieldType.INPUT;
saisie.text = "";
//tableau
var valeurPourMoyenne:Array = new Array();
//definition des parametres des zone de texte
function createCustomTextField(x:Number, y:Number, width:Number, height:Number):TextField
{
var result:TextField = new TextField();
result.x = x;
result.y = y;
result.width = width;
result.height = height;
result.background = false;
result.border = true;
result.borderColor = 0xffffff;
addChild(result);
return result;
}
//ecouteur touche enter
this.addEventListener(KeyboardEvent.KEY_DOWN, toucheDown);
//fonction clavier
function toucheDown(evt:KeyboardEvent)
{
//touche enter keycode 13
if (evt.keyCode == 13)
{
//inserer les valeur dans le tableau
valeurPourMoyenne.push(saisie.text);
//affichage zone texte et contenu
addChild ( valeurTexte );
valeurTexte.text = "valeur dans le tableau: "+valeurPourMoyenne.toString();
//recuperation du nombre de valeur
var lng:int = valeurPourMoyenne.length;
//affichage zone texte et contenu
addChild ( nombreValeurTexte );
nombreValeurTexte.text = "nombre de valeur: "+lng.toString();
//calcul de la somme des valeurs
var total:Number = 0;

for (var i:Number = 0; i< lng; i++)
{
var valeurNumber:Number = valeurPourMoyenne[i]
total += valeurNumber;
}
//moyenne
var moyenne = total/lng;
//affichage zone texte et contenu
addChild ( sommeValeurTexte );
sommeValeurTexte.text = "somme des valeurs: "+total.toString();
addChild ( resultatTexte );
resultatTexte.text = "moyenne: "+moyenne.toString();
saisie.text = "";
}
}
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
12 déc. 2009 à 02:16
Des petits conseils en vrac (j'ai pas planché dessus), certains points me semblent importants :

for (var i:Number = 0; i< lng; i++)
for (var i:int = 0; i < lng; i++)

Le type int est plus optimisé pour des boucles.

var moyenne = total/lng;
var moyenne:Number = total/lng;

ne pas oublier de typer les variables.

addChild(resultatTexte);
this.addChild(resultatTexte);

Ici, cela n'a rien à voir avec une optimisation et ton code marche très bien car tu es sur un code "in flash", mais pense, vue que tu as l'air motivé pour coder, qu'il se peut qu'un jour tu fasses des classes, et là c'est mieux, tout simplement ;). En tout cas c'est bien, rare sont ceux qui pensent à faire une initialisation de la variable de condition pour une boucle, beaucoup ont tendance à faire un :

for (var i:int=0;i<monTableau.length;i++)

sans se douter que l'accès à la fonction length (sisi c'est une fonction ^^) est un bouffe ressource lorsque l'on fait des boucles énormes.
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
12 déc. 2009 à 14:46
Merci crackter, c'est super sympa, et oui je suis assez motivé...^^, je vais mettre en application les règles que tu as rappeler pour le typage, et int en place de Number, j'ai penser un moment retravailler ce script pour le mettre en class, mais j'éprouve de grande difficulté avec les attribut private et public, cependant c'est vers les class que je veux aller, je m'accroche et tes solutions me donne encore plus de motivation....^^
0
crackter Messages postés 401 Date d'inscription mercredi 12 novembre 2003 Statut Membre Dernière intervention 31 janvier 2010
13 déc. 2009 à 00:54
et bien si tu as des questions sur les classes, n'hésites pas à m'envoyer un message privé, ça sera avec un grand plaisir que je t'aiderai.
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
13 déc. 2009 à 14:41
Merci, crackter, je vais essayer de mettre ce code sous forme de classes, comme sa j'aurais une base pour pouvoir te poser des question, c'est super sympas....^^
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
16 déc. 2009 à 05:21
Bonsoir, j'ai donc essayer de mettre ce code dans un fichier as externe, l'anime a l'air de fonctionner, mais quand on appuie sur enter j'obtiens:

TypeError: Error #1006: addChild n'est pas une fonction.
at MethodInfo-2()

j'ai pas mal galéré et je pense qu'il y a beaucoup d'erreur, je lance l'anime depuis un fla avec ces lignes:

var moyenne:Moyenne = new Moyenne();
addChild (moyenne);

le fichier as est nomé: Moyenne.as

package
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldType;

public class Moyenne extends Sprite
{
private var format:TextFormat = new TextFormat();
private var valeurPourMoyenne:Array = new Array();

public function Moyenne ()
{
var valeurTexte:TextField = createCustomTextField(140, 140, 640, 180);
var nombreValeurTexte:TextField = createCustomTextField(140, 325, 640, 30);
var sommeValeurTexte:TextField = createCustomTextField(140, 360, 640, 30);
var resultatTexte:TextField = createCustomTextField(140, 395, 640, 30);
var texteInstruction:TextField = createCustomTextField(140, 430, 250, 60);
var saisie:TextField = createCustomTextField(395, 430, 385, 30);
format.font = "Trebuchet MS";
format.color = 0xffffff;
format.size = 20;
valeurTexte.type = TextFieldType.DYNAMIC;
valeurTexte.defaultTextFormat = format;
valeurTexte.text = "valeurs: ";
valeurTexte.multiline = true;
valeurTexte.wordWrap = true;
valeurTexte.visible = false;
nombreValeurTexte.defaultTextFormat = format;
nombreValeurTexte.type = TextFieldType.DYNAMIC;
nombreValeurTexte.text = "nombre de valeurs: ";
nombreValeurTexte.visible = false;
sommeValeurTexte.defaultTextFormat = format;
sommeValeurTexte.type = TextFieldType.DYNAMIC;
sommeValeurTexte.text = "somme des valeurs: ";
sommeValeurTexte.visible = false;
resultatTexte.defaultTextFormat = format;
resultatTexte.type = TextFieldType.DYNAMIC;
resultatTexte.text = "resultats: ";
resultatTexte.visible = false;
texteInstruction.defaultTextFormat = format;
texteInstruction.type = TextFieldType.DYNAMIC;
texteInstruction.text = "entrez vos valeurs ici ----> touche-Enter-pour valider";
texteInstruction.multiline = true;
texteInstruction.wordWrap = true;
saisie.defaultTextFormat = format;
saisie.type = TextFieldType.INPUT;
saisie.text = "";

function createCustomTextField(x:Number, y:Number, width:Number, height:Number):TextField
{
var result:TextField = new TextField();
result.x = x;
result.y = y;
result.width = width;
result.height = height;
result.background = false;
result.border = true;
result.borderColor = 0xffffff;
addChild(result);
return result;
}
this.addEventListener(KeyboardEvent.KEY_DOWN, toucheDown);
function toucheDown(evt:KeyboardEvent)
{
if (evt.keyCode == 13)
{
valeurTexte.visible = true;
nombreValeurTexte.visible = true;
sommeValeurTexte.visible = true;
resultatTexte.visible = true;
valeurPourMoyenne.push(saisie.text);
this.addChild ( valeurTexte );
valeurTexte.text = "valeur dans le tableau: "+valeurPourMoyenne.toString();
var lng:int = valeurPourMoyenne.length;
this.addChild ( nombreValeurTexte );
nombreValeurTexte.text = "nombre de valeur: "+lng.toString();
var total:Number = 0;

for (var i:int = 0; i< lng; i++)
{
var valeurNumber:Number = valeurPourMoyenne[i]
total += valeurNumber;
}
var moyenne:Number = total/lng;
this.addChild ( sommeValeurTexte );
sommeValeurTexte.text = "somme des valeurs: "+total.toString();
this.addChild ( resultatTexte );
resultatTexte.text = "moyenne: "+moyenne.toString();
saisie.text = "";
}
}
}
}
}
0
mtlbss Messages postés 39 Date d'inscription dimanche 29 novembre 2009 Statut Membre Dernière intervention 8 mai 2011
16 déc. 2009 à 10:57
Désolé pour le post précèdent, en faite j'avais mis des this partout, donc sa pouvait pas marcher, voici le script qui marche:

je lance l'anime depuis un fla avec ces lignes:

var moyenne:Moyenne = new Moyenne();
addChild (moyenne);

le fichier as est nomé: Moyenne.as



package
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldType;

public class Moyenne extends Sprite
{
private var format:TextFormat = new TextFormat();
private var valeurPourMoyenne:Array = new Array();

public function Moyenne ()
{
var valeurTexte:TextField = createCustomTextField(140, 140, 640, 180);
var nombreValeurTexte:TextField = createCustomTextField(140, 325, 640, 30);
var sommeValeurTexte:TextField = createCustomTextField(140, 360, 640, 30);
var resultatTexte:TextField = createCustomTextField(140, 395, 640, 30);
var texteInstruction:TextField = createCustomTextField(140, 430, 250, 60);
var saisie:TextField = createCustomTextField(395, 430, 385, 30);
format.font = "Trebuchet MS";
format.color = 0xffffff;
format.size = 20;
valeurTexte.type = TextFieldType.DYNAMIC;
valeurTexte.defaultTextFormat = format;
valeurTexte.text = "valeurs: ";
valeurTexte.multiline = true;
valeurTexte.wordWrap = true;
valeurTexte.visible = false;
nombreValeurTexte.defaultTextFormat = format;
nombreValeurTexte.type = TextFieldType.DYNAMIC;
nombreValeurTexte.text = "nombre de valeurs: ";
nombreValeurTexte.visible = false;
sommeValeurTexte.defaultTextFormat = format;
sommeValeurTexte.type = TextFieldType.DYNAMIC;
sommeValeurTexte.text = "somme des valeurs: ";
sommeValeurTexte.visible = false;
resultatTexte.defaultTextFormat = format;
resultatTexte.type = TextFieldType.DYNAMIC;
resultatTexte.text = "resultats: ";
resultatTexte.visible = false;
texteInstruction.defaultTextFormat = format;
texteInstruction.type = TextFieldType.DYNAMIC;
texteInstruction.text = "entrez vos valeurs ici ----> touche-Enter-pour valider";
texteInstruction.multiline = true;
texteInstruction.wordWrap = true;
saisie.defaultTextFormat = format;
saisie.type = TextFieldType.INPUT;
saisie.text = "";

function createCustomTextField(x:Number, y:Number, width:Number, height:Number):TextField
{
var result:TextField = new TextField();
result.x = x;
result.y = y;
result.width = width;
result.height = height;
result.background = false;
result.border = true;
result.borderColor = 0xffffff;
addChild(result);
return result;
}
this.addEventListener(KeyboardEvent.KEY_DOWN, toucheDown);
function toucheDown(evt:KeyboardEvent)
{
if (evt.keyCode == 13)
{
valeurTexte.visible = true;
nombreValeurTexte.visible = true;
sommeValeurTexte.visible = true;
resultatTexte.visible = true;
valeurPourMoyenne.push(saisie.text);
addChild ( valeurTexte );
valeurTexte.text = "valeur dans le tableau: "+valeurPourMoyenne.toString();
var lng:int = valeurPourMoyenne.length;
addChild ( nombreValeurTexte );
nombreValeurTexte.text = "nombre de valeur: "+lng.toString();
var total:Number = 0;

for (var i:int = 0; i< lng; i++)
{
var valeurNumber:Number = valeurPourMoyenne[i]
total += valeurNumber;
}
var moyenne:Number = total/lng;
addChild ( sommeValeurTexte );
sommeValeurTexte.text = "somme des valeurs: "+total.toString();
addChild ( resultatTexte );
resultatTexte.text = "moyenne: "+moyenne.toString();
saisie.text = "";
}
}
}
}
}
0
Rejoignez-nous