Aller au contenu

[Centralisation] Flash/AS3


Eagle1

Messages recommandés

allez une petite

	var chargementXML:URLLoader = new URLLoader();// objet de chargement
var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load(fichier);

// chargement terminé du fichier xml

function chargementComplet(pEvt:Event):void 
{   // on récupère notre xml

	var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
	var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
	var lol = "restaurant.php?id=" + restaurant.(nomrestaurant=evt.target.selectedItem.source).idresto;
	navigateToURL( new URLRequest(lol), "_blank");


}

sur que tu comprend ce que je veux faire :mdr2:

ce qui me pose problème c'est :

var lol = "restaurant.php?id=" + restaurant.(nomrestaurant=evt.target.selectedItem.source).idresto;

evt.target.selectedItem.source contient le nom du restaurant dont je cherche l'id

j'ai besoin donc qu'il me le trouve et qu'il me sorte uniquement ça

pour le moment voila le résultat que ma variable lol:

restaurant.php?id=<idresto>1</idresto><idresto>2</idresto><idresto>3</idresto>

pas terrible ^^

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 68
  • Créé
  • Dernière réponse

oh t'es la ce matin toi ^^

j'ai rempli un peu la FAQ

alors j'ai encore quelques question :

j'ai un composant TileList sur ma page. Je lui file le focus dès que la souris passe dessus. Comme ça un petit texte s'affiche et te dit : appuie sur espace pour agrandir le menu ^^

seulement ça marche pas sur firefox 3 (ça nécessite un clic sur le composant)... mais oui sous IE..

je vois pas moyen de contourner le truc...

a part que l'évènement KEYBOARD de la touche espace soit placé sur le document complet...

Toujours pour mon TileList, je cherche comment changer son style, y a une classe apparement mais je comprend rien à comment changer le style...

et dernièrement, c'est possible d'écouter MOUSE_MOVE sur la scène entière histoire de recup les coordonnée de la souris ?

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Toi :down::roll:

Mets-moi le code pour ton TileList, je vais voir ce que ça donne chez moi (plus le code html)

Sinon, pour modifier le style, les méthodes se trouvent dans l'aide, dans les Properties de la classe TileList. Tu as par exemple rowCount, rowHeight ...

Pour modifier le rowHeight par exemple, le code sera le suivant :

var myTileList:TileList = new TileList();
myTileList.rowHeight = 100;

Pour les coordonnées de la souris sur un MOUSE_MOVE, c'est event.stageX et event.stageY, avec ça :

stage.addEventListener(MouseEvent.MOUSE_MOVE, action);

function action (event:MouseEvent):void
{
trace(event.stageX); // coordonnées horizontales
	trace(event.stageY); // coordonnées verticales
}

Lien vers le commentaire
Partager sur d’autres sites

:ouioui:

merci pour la souris

import fl.controls.TileList;
import fl.data.DataProvider;
import fl.controls.ScrollBarDirection;

// on charge du xml

var chargementXML:URLLoader = new URLLoader();// objet de chargement
var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load(fichier);

// chargement terminé du fichier xml

function chargementComplet(pEvt:Event):void {   // on récupère notre xml

var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes


for each(var contact:XML in restaurant)//pour chaque noeud enfants dans la liste des personnes
{
dp.addItem({label: contact.nomrestaurant, source: contact.imagepresent});

}
}

// on affiche le menu


var dp:DataProvider = new DataProvider();
dp.addItem({label: "lol", source: "t"});
dp.addItem({label: "Au caveau Nuitons", source: "t"});
var myTileList:TileList = new TileList();
myTileList.dataProvider = dp;
myTileList.columnWidth = 150;
myTileList.rowHeight = 120;
myTileList.columnCount =1;
myTileList.rowCount = 3;
myTileList.move(590, 131);
myTileList.direction = ScrollBarDirection.VERTICAL;
myTileList.verticalLineScrollSize=50;
addChild(myTileList);
myTileList.mouseFocusEnabled=true;


// petit text d'aide sur le menu
var aide:TextField = new TextField();
aide.width=300;
aide.height=20;
aide.x=100;
aide.y=150;
var testaide = "1";
aide.border=true;
aide.htmlText="<font face=\"verdana\">Appuyez sur \"Espace\" pour<br/> agrandir le menu</font>";
addChild(aide);
aide.visible=false;


myTileList.addEventListener(Event.CHANGE,choixfait); 
myTileList.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);
myTileList.addEventListener(MouseEvent.ROLL_OVER,textaide);
myTileList.addEventListener(MouseEvent.ROLL_OUT,removetextaide);


function textaide(evt:MouseEvent)
{
myTileList.setFocus();
if(testaide=="1")
{
	aide.visible=true;
}
testaide="2";
}

function removetextaide(evt:MouseEvent)
{
aide.visible=false;
testaide="1";
}

function choixfait(evt:Event) 
{ 

var chargementXML:URLLoader = new URLLoader();// objet de chargement
var fichier:URLRequest = new URLRequest("bdd.xml");// url du fichier chargé
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load(fichier);

// chargement terminé du fichier xml

function chargementComplet(pEvt:Event):void 
{   // on récupère notre xml

	var donnee:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Level.
	var restaurant:XMLList = donnee.elements(); //le document XML est constitué d'une liste d'éléments XML, en l'occurence ici, une liste de personnes
	var lol = "restaurant.php?id=" + restaurant.(nomrestaurant==evt.target.selectedItem.label).idresto;
	navigateToURL( new URLRequest(lol), "_blank");


}
} 

function agrandir(evt:KeyboardEvent) 
{
if(evt.keyCode==32)
{
	aide.visible=false;
	myTileList.columnCount = 4;
	myTileList.rowCount = 3;
	myTileList.move(80, 131);
	addChild(myTileList);
}
}

pour le style du tilelist il y a un truc plus poussé (omme tu peuxle oir les rowheight je les ai trouvé ^^).

regarde du côté de cellrenderer class, moi je pige pas

Lien vers le commentaire
Partager sur d’autres sites

Alors, je pense que concernant le problème du TileList, il faut appliquer l'addEventListener au stage et pas au TileList.

Ce qui veut dire, au lieu d'avoir ceci :

myTileList.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);

Je ferais ceci :

stage.addEventListener(KeyboardEvent.KEY_DOWN,agrandir);

Ce qui déclenche la modification du TileList dès que la touche espace est utilisée.

Pour le reste, je regarde tout à l'heure, promis :keskidit:

Lien vers le commentaire
Partager sur d’autres sites

C'est bizarre, parce que ça marche chez moi.

Le stage, normalement est toujours actif. Pas besoin de lui donner le focus.

Remarque, j'ai essayé avec moins de code. Si tu fais :

stage.addEventListener(KeyboardEvent.KEY_DOWN, action);

function action(event:KeyboardEvent)
{
  if(evt.keyCode==32)
 {
  myTileList.rowCount = 5;
 }
}

Ca doit marcher.

Après, je ne suis pas sûr que le addChild(myTileList) de la fonction agrandir soit nécessaire, car tu l'as déjà fait avant.

Mais c'est le texte "appuie sur espace pour agrandir le menu" qui pose problème exactement ? Ou la touche espace ?

Lien vers le commentaire
Partager sur d’autres sites

en effet il est pas utile

c'est la touche espace qui pose le problème

quand je met le listener sur stage, ça nécessite un clic quelque part sur l'anim pour que je puisse appuyez sur espace

et setFocus(); marche pas sur stage

donc je lâche l'affaire je fais un bouton agrandir...

edit: pour ce qui est du skin du tile list je peux changer ça en modifiant ce qui est inclue dans la bibliothèque de flash niquel !

Lien vers le commentaire
Partager sur d’autres sites

Eagle1 : ton lien est obselete, cela fait à peu près 6 mois que SO est passé en v2. Après l'avoir essayer tu ne voudra plus jamais repasser sur la 1.5 : 

http://code.google.com/p/swfobject/

Sinon pour la petite histoire des librairies d'encapsulations, au départ SWF Object s'appelait Flash Object et possèdait un concurrent : UFO (Unidentified Flash Object). Cela a duré un moment jusqu'à ce que la deuxième génération de ces librairies se préparent et qu'arrive un troisième laron "SWF Fix" qui grâce à un article sur ALA à réussi à rescussité le projet SO et unifier les efforts des trois librairies.

Depuis le monde des flasheurs/javascripteurs baigne dans l'amour, la joie et le nutella.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

et hop je vais faire revrire cette centralisation :transpi:

Bonjour a tous !

Voici mon nouveau projet : un mini flash de dessin sur site web

fonctionnalitee :

- ligne droite, crayon normal, carre, rond, remplir des espaces blancs, effacer, changer d'epaisseur, de couleur...

voila ou j'en suis :

stop();
//	 INITIAL SETTINGS
var selectedColor = 0x000000;
var canDraw:Boolean= false; // ce bool authorise ou non le dessin
var drag:Boolean = false;
var firstTime:Boolean = true;


var var_container:MovieClip = new MovieClip(); // je me sert de ce mc que container de var
var_container.tool="doodleLine";
var_container.selectedSize=1;

var nbDrawing = 1;
var bgColor = 0x000000;
var posStartX:Number = new Number();
var posStartY:Number = new Number();
var startX;
var startY;

var my_container:Sprite = new Sprite();
my_container.x=0;
my_container.y=0;
addChild(my_container);

// DRAW DETECTING

function candraw(event:MouseEvent):void
{
if (working_zone_i.hitTestPoint(event.stageX,event.stageY)) 
{
	posStartX = this.mouseX;
	posStartY = this.mouseY;
	canDraw = true;
	firstTime = true;
}
}


function check_level(event:MouseEvent):void
{
if (working_zone_i.hitTestPoint(event.stageX,event.stageY)) 
{
	nbDrawing=nbDrawing+1;
}
canDraw=false;

}

function drawing(event:MouseEvent):void
{
if(canDraw)
{
	doDraw();
}
}


stage.addEventListener(MouseEvent.MOUSE_DOWN,candraw);
stage.addEventListener(MouseEvent.MOUSE_UP,check_level);
stage.addEventListener(MouseEvent.MOUSE_MOVE,drawing);


//DRAWING FUNCTION

function doDraw() {
switch (var_container.tool) {
case "line" :
	drawLine();
	break;
case "doodleLine" :
	drawDoodleLine();
	break;
case "oval" :
	drawOval();
	break;
case "square" :
	drawSquare();
	break;
	default:drawDoodleLine();
}
}



function drawLine() 
{
if (working_zone_i.hitTestPoint(mouseX,mouseY)) 
{

	var line:Sprite = new Sprite();
	my_container.addChild(line);
	line.graphics.lineStyle(var_container.selectedSize,selectedColor);
	line.graphics.moveTo(posStartX,posStartY);
	line.graphics.lineTo(mouseX,mouseY);

}
}

function drawDoodleLine() 
{
if (working_zone_i.hitTestPoint(mouseX,mouseY)) 
{

	var doodleLine:Sprite = new Sprite();
	my_container.addChild(doodleLine);
	if(firstTime)
	{
		startX = posStartX;
		startY = posStartY;
		firstTime = false;
	}
	doodleLine.graphics.lineStyle(var_container.selectedSize, selectedColor);
	doodleLine.graphics.moveTo(startX,startY);
	doodleLine.graphics.lineTo(mouseX, mouseY);
	startX = mouseX;
	startY = mouseY;


}
}

function drawSquare() 
{
	var square:Sprite = new Sprite();
	my_container.addChild(square);
	square.graphics.lineStyle(var_container.selectedSize,selectedColor);
	square.graphics.drawRect(0,0,this.mouseX-posStartX,this.mouseY-posStartY);
	square.x = posStartX;
	square.y = posStartY;
}
function drawOval() 
{
if (working_zone_i.hitTestPoint(mouseX,mouseY)) 
{
	var oval:Sprite = new Sprite();
	my_container.addChild(oval);
	oval.graphics.lineStyle(1,selectedColor);
	var a:Number = (posStartX-this.mouseX)*(posStartX-this.mouseX);
	var b:Number = (posStartY-this.mouseY)*(posStartY-this.mouseY);
	var rad:Number = Math.sqrt(a+b);
	oval.graphics.beginFill(bgColor,1.0);
	oval.graphics.drawCircle(posStartX,posStartY,rad);		
	oval.graphics.endFill();			
}		
}




function remove_all(event:MouseEvent):void
{	
removeChild(my_container);
reset_btn.removeEventListener(MouseEvent.CLICK,remove_all);
}

reset_btn.addEventListener(MouseEvent.CLICK,remove_all);

function new_draw(event:MouseEvent):void
{
my_container = new Sprite();
my_container.x=0;
my_container.y=0;
addChild(my_container);
reset_btn.addEventListener(MouseEvent.CLICK,remove_all);
}

new_btn.addEventListener(MouseEvent.CLICK,new_draw);

// ************************** COLOR PALETTE ************************

pour ce qui est du changement de taille et de couleur je me debrouille (bien que si quelqu'un a une paltte de couleur toute prete et qui marche je dit pas non :transpi:)

Voila mes petits probs :

- hit zone : je fais un test de hitzone pour svaoir si j'ai le droit de dessiner... le truc c'est que quand je cree un cercle par exemple, sa surface ne fait plus partie de la surface de dessin et donc je ne peux plus dessiner dessus... comment je pourrai ruser la dessus ?

- detection du dessin : poiur les 3 modes ligne droite, carre, et rectangle, l'evenement mouse_click convient tres bien. en revanche pour le doodleline, le crayon, ca ne va pas. J'ai besoin d'un mouse_move. Alors j'ai bien essaye de remove et add les event dont j'ai besoin seulement mon souci : ma palette de selection de taille et d'outils est un composant integre dans ma scene principale. en clair il est dans ma librairie, je l'ai pose dessus, programme et il marche. Seulement je ne sais pas comment acceder aux fonctions contenu dans ma scene principale...

- remplir des zones vides, aucune idee de comment faire :craint:

si quelqu'un a quelques tips ! merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

- hit zone : je fais un test de hitzone pour svaoir si j'ai le droit de dessiner... le truc c'est que quand je cree un cercle par exemple, sa surface ne fait plus partie de la surface de dessin et donc je ne peux plus dessiner dessus... comment je pourrai ruser la dessus ?

si quelqu'un a quelques tips ! merci d'avance !

Pas compris :transpi: Tu ne fais que des hitTestPoint or ces tests ne prennent pas en compte le fait qu'il y ait des objets au-dessus du point à tester si je ne me trompe ?

- detection du dessin : poiur les 3 modes ligne droite, carre, et rectangle, l'evenement mouse_click convient tres bien. en revanche pour le doodleline, le crayon, ca ne va pas. J'ai besoin d'un mouse_move. Alors j'ai bien essaye de remove et add les event dont j'ai besoin seulement mon souci : ma palette de selection de taille et d'outils est un composant integre dans ma scene principale. en clair il est dans ma librairie, je l'ai pose dessus, programme et il marche. Seulement je ne sais pas comment acceder aux fonctions contenu dans ma scene principale...

Pas trop compris non plus :transpi:

- remplir des zones vides, aucune idee de comment faire :oops:

Ca c'est compréhensible :craint:. Le principe en gros

- Aplanir ton image dans un bitmapdata histoire d'avoir tous les éléments du dessin au même endroit

- Récupérer la couleur du pixel cliqué (getPixel) et définir la marge d'erreur qui va te permettre de dire à partir de quand tu vas dire "stop" parceque la différence entre la couleur de départ et la couleur du pixel à traiter est trop grande

- En partant du point de départ cliqué, mettre en place un petit algo de flood fill pour parcourir la zone à remplir, en t'arrêtant là où la couleur est trop différente de la couleur du pixel cliqué.. Ça peut paraitre un peu effrayant comma ça mais ça peut être fun si tu te prends au jeu :smack:. Si tu veux garder le remplissage sur un DisplayObject différend tu peux dessiner tes pixels sur un second BitmapData, que tu ajouteras à ton dessin à la fin en jetant l'image aplatie.

Lien vers le commentaire
Partager sur d’autres sites

- hit zone : je fais un test de hitzone pour svaoir si j'ai le droit de dessiner... le truc c'est que quand je cree un cercle par exemple, sa surface ne fait plus partie de la surface de dessin et donc je ne peux plus dessiner dessus... comment je pourrai ruser la dessus ?

si quelqu'un a quelques tips ! merci d'avance !

Pas compris :transpi: Tu ne fais que des hitTestPoint or ces tests ne prennent pas en compte le fait qu'il y ait des objets au-dessus du point à tester si je ne me trompe ? ben apparement si :zarb: et ca m'embete un peu beaucoup...

- detection du dessin : poiur les 3 modes ligne droite, carre, et rectangle, l'evenement mouse_click convient tres bien. en revanche pour le doodleline, le crayon, ca ne va pas. J'ai besoin d'un mouse_move. Alors j'ai bien essaye de remove et add les event dont j'ai besoin seulement mon souci : ma palette de selection de taille et d'outils est un composant integre dans ma scene principale. en clair il est dans ma librairie, je l'ai pose dessus, programme et il marche. Seulement je ne sais pas comment acceder aux fonctions contenu dans ma scene principale...

Pas trop compris non plus :oops:j'ai reussi :p

- remplir des zones vides, aucune idee de comment faire :p

Ca c'est compréhensible :D . Le principe en gros

- Aplanir ton image dans un bitmapdata histoire d'avoir tous les éléments du dessin au même endroit

- Récupérer la couleur du pixel cliqué (getPixel) et définir la marge d'erreur qui va te permettre de dire à partir de quand tu vas dire "stop" parceque la différence entre la couleur de départ et la couleur du pixel à traiter est trop grande

- En partant du point de départ cliqué, mettre en place un petit algo de flood fill pour parcourir la zone à remplir, en t'arrêtant là où la couleur est trop différente de la couleur du pixel cliqué.. Ça peut paraitre un peu effrayant comma ça mais ça peut être fun si tu te prends au jeu ;) . Si tu veux garder le remplissage sur un DisplayObject différend tu peux dessiner tes pixels sur un second BitmapData, que tu ajouteras à ton dessin à la fin en jetant l'image aplatie.

- Aplanir ton image dans un bitmapdata histoire d'avoir tous les éléments du dessin au même endroit

ca ca m'interesse :p

je fais comment ?

Lien vers le commentaire
Partager sur d’autres sites

Deja si j'étais toi j'utiliserai drawEllipse plutôt que drawCircle. Enfin c'est même obligatoire pour dessiner des éllipses.

Après dessiner tous les calques sur un bitmapdata c'est bien mais ce n'est que la première étape du remplissage d'une zone.. Pour mettre un bitmap data dans ta display list tu a des méthodes pour copier le contenu d'un BitmapData dans les graphiques d'un sprite.. Dans tous les cas je te conseille vivement de te documenter sur les classes Graphics et BitmapData qui sont les outils de base pour le dessin en AS3 !

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.


×
×
  • Créer...