Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2007, 08h56   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 52
Points : 4
Points : 4
Par défaut Appeler une fonction Javascript depuis un AS3

Bonjour,

J'ai une animation flash qui permet de créer un dessin. Lorsque l'utilisateur clique sur le bouton enregistrer, j'appelle un script php qui crée une image jpeg sur le serveur et crée un enreg dans la base de données (l'enreg donne le lien de l'image pour cet utilisateur)

J'aimerais que la page ou se trouve l'anim flash charge en vignette le(s) dessin(s) qui vien(nen)t d'être créé(s)

Au début je pensais utiliser sur cette meme page un script JS et Ajax pour appeler un script php qui lit la BDD et recherche une nouvelle image. Si trouvé alors ce script renvoit l'image et la page de l'anim flash l'affiche

Seulement le pbm est que je ne vois pas comment faire une sorte de "listener" permanent sur ma page flash ?

Alors est il possible depuis flash d'appeler un script JS qui se trouve sur la meme page que l'anim flash sanzs recharger la page ?

Si oui alors des que l'utilisateur clique sur le bouton enregistrer je pourrais faire cela :
1- appeller le script de créatio, de l'image et d'un enreg dans la BDD
2- appeller le script JS qui est sur la meme page que l'anim pour charger cette nouvelle image via Ajax

Quand pensez vous ?
Quelle serait la meilleure solution ?
Est il possible d'appeler un script JS sur ma page ou se trouve l'anim flash depuis cette appli flash ?
Auriez vosu des exemples ?

Par avance merci

Pascal

ps voici le code de l'anim flash et du script php (qui pour l'instant ne fait que afficher l'image pour vérifier que cela fonctionne) cela peut toujours servir !

Code Flash AS3
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
import fl.controls.ProgressBar;
import fl.controls.ProgressBarMode;
 
var bData:BitmapData = new BitmapData(520,360,false,0xFFFFFF);//(560,490);
var bMap:Bitmap = new Bitmap(bData);
var bitmapX:uint = 95;
var bitmapY:uint = 5;
bMap.x = bitmapX;
bMap.y = bitmapY;
addChild(bMap);
 
 
var sourisPress:Boolean = false;
var spr:Sprite = new Sprite();
 
var pb = new ProgressBar();
pb.move(123, 399);
pb.mode = ProgressBarMode.MANUAL;
 
stage.addEventListener(MouseEvent.MOUSE_DOWN,cliqueSouris);
stage.addEventListener(MouseEvent.MOUSE_UP,relacheSouris);
stage.addEventListener(MouseEvent.MOUSE_MOVE,bougeSouris);
//btEffacer.addEventListener(MouseEvent.CLICK,effaceEcran);
btEnregistrer.addEventListener(MouseEvent.CLICK,capture);
 
function cliqueSouris(evt:MouseEvent):void{
	spr.graphics.clear();
	spr.graphics.lineStyle(epaisseur.value);
	spr.graphics.moveTo(mouseX-bitmapX,mouseY-bitmapY);
	sourisPress = true;
	}
 
function bougeSouris(evt:MouseEvent):void{
	if(sourisPress){
		spr.graphics.lineTo(mouseX-bitmapX,mouseY-bitmapY);
		bData.draw(spr);
	}
}
 
function relacheSouris(evt:MouseEvent):void{
	sourisPress = false;
}
 
function effaceEcran():void{
	bData.fillRect(bData.rect,0xFFFFFF);
	message_text.text="";
	removeChild(pb); 
}
 
function capture(evt:MouseEvent):void{
    var pixels:Array = new Array();
    var largeur:Number = bMap.width;
    var hauteur:Number = bMap.height;
 
	addChild(pb);
 
	//Sauvegarde de chaque pixel dans un tableau
    for (var a = 0; a<=largeur; a++) {
        for (var b = 0; b<=hauteur; b++) {
			var tmp = bData.getPixel(a, b).toString(16);
			if(tmp=="ffffff") {
				tmp="";
			}
			var taux = int((a*b*100)/(largeur*hauteur));
            pixels.push(tmp);
			pb.setProgress(taux, 100);
        }
		taux = int((a*100)/largeur);
		pb.setProgress(taux, 100);
    }
   	// Debug pour vérifier le contenu du tab de pixels
	//trace(pixels);
 
	//Envoie à PHP
	envoiphp(hauteur, largeur, pixels);
}
 
function envoiphp(hauteur:Number, largeur:Number, pixels:Array):void{
    var url:String = "http://127.0.0.1/save_jpg.php";
    var requete:URLRequest = new URLRequest(url);
 
    var variables:URLVariables = new URLVariables();
    requete.data = variables;
    variables.img_hauteur = hauteur;
	variables.img_largeur = largeur;
	variables.image_flash = pixels.toString();
	requete.method = URLRequestMethod.POST;
 
    navigateToURL(requete); 
	message_text.text="Sauvegardé !";
	effaceEcran();
}
et voci mon code PHP qui crée l'image JPEG (et qui l'affiche mais qui enregistrera l'image)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?php
$imgChaine = explode(",", $_POST['image_flash']);
$largeur = $_POST['img_largeur'];
$hauteur = $_POST['img_hauteur']; 
$image = imagecreatetruecolor ($largeur ,$hauteur );
imagefill($image, 0, 0, 0xFFFFFF);
$i=0;
for($x=0; $x<=$largeur; $x++){
	for($y=0; $y<=$hauteur; $y++){
		$value=$imgChaine[$i];
		if($value != ""){
			$hex = $value;
			while(strlen($hex) < 6){
				$hex = "0" . $hex;
			}
			// convert value from HEX to RGB
			$r = hexdec(substr($hex, 0, 2));
			$g = hexdec(substr($hex, 2, 2));
			$b = hexdec(substr($hex, 4, 2));
			$test = imagecolorallocate($image, $r, $g, $b);
			imagesetpixel($image, $x, $y, $test);		
		}
		$i++;
	}
}
header( "Content-type: image/jpeg" );
imagejpeg($image, "", 90);
imagedestroy($image);
?>
Et le code HTML d'affichage de l'anim. C'est dans CETTE PAGE que j'aimerais affiché les iimages créees en vignette en lisant la BDD et SANS RECHARGER la page
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>appli_dessin</title>
<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="AC_RunActiveContent.js" language="javascript"></script>
</head>
<body bgcolor="#cccccc">
<!--URL utilisées dans l'animation-->
<!--texte utilisé dans l'animation-->
<!--
<p align="center"></p>
-->
<!-- saved from url=(0013)about:internet -->
<script language="javascript">
	if (AC_FL_RunContent == 0) {
		alert("Cette page nécessite le fichier AC_RunActiveContent.js.");
	} else {
		AC_FL_RunContent(
			'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
			'width', '650',
			'height', '490',
			'src', 'appli_dessin',
			'quality', 'high',
			'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
			'align', 'middle',
			'play', 'true',
			'loop', 'true',
			'scale', 'showall',
			'wmode', 'window',
			'devicefont', 'false',
			'id', 'appli_dessin',
			'bgcolor', '#cccccc',
			'name', 'appli_dessin',
			'menu', 'true',
			'allowFullScreen', 'false',
			'allowScriptAccess','sameDomain',
			'movie', 'appli_dessin',
			'salign', ''
			); //end AC code
	}
</script>
<noscript>
	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="650" height="490" id="appli_dessin" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="movie" value="appli_dessin.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#cccccc" />	<embed src="appli_dessin.swf" quality="high" bgcolor="#cccccc" width="650" height="490" name="appli_dessin" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
	</object>
</noscript>
</body>
</html>
pfo69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2007, 10h22   #2
Invité de passage
 
Inscription : novembre 2007
Messages : 52
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 52
Points : 4
Points : 4
arff que suis je bete !
ben oui c'est possible !

Il suffit que j'ajoute un truc du style dans mon AS3

Code :
1
2
 
	ExternalInterface.call("test", "Coucou");
J'aurais alors
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function envoiphp(hauteur:Number, largeur:Number, pixels:Array):void{
	var url:String = "http://127.0.0.1/save_jpg.php";
    var requete:URLRequest = new URLRequest(url);
            
    var variables:URLVariables = new URLVariables();
    requete.data = variables;
    variables.img_hauteur = hauteur;
	variables.img_largeur = largeur;
	variables.image_flash = pixels.toString();
	requete.method = URLRequestMethod.POST;
            
    navigateToURL(requete); 
	message_text.text="Sauvegardé !";
	effaceEcran();
	//nom de la fonction à appeler et le paramètre à passer
	ExternalInterface.call("test", "Coucou");}
bon ok

donc
-1- mon AS appelle le script php qui crée l'image en jpeg et crée un enreg dans la BDD
-2- mon AS appelle un code javascript qui insere l'image en vignette

Mais la je sais pas faire ça en JS.

Pensez vous que la bonne solution pourrait être de mettre dans le JS de l'ajax qui appelerait un script php qui lirait la BDD, recupererait l'image créé, la tranformerait en vignette et retournerait le code html pour afficher cette vignette ?

Par avance merci

Pascal
pfo69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2007, 14h43   #3
Membre émérite
 
Avatar de thecaptain
 
Étudiant
Inscription : décembre 2003
Messages : 916
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2003
Messages : 916
Points : 898
Points : 898
Salut,

Tu peux envoyer l'url de ton image à ta fonction javascript et afficher une balise img non ? Ca me parait un peu tuer-une-mouche-avec-un-missile-nucléaire ta méthode d'insérer de l'ajax pour ca

@++
__________________
API ScrollBar (AS2)
Masapi (Massive Loading API) (AS3)
Lost in AStorm
thecaptain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h36.


 
 
 
 
Partenaires

Hébergement Web