Vider la scène

Signaler
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
-
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
-
Bonjour à tous,
J'essaie de me mettre à l'AS3 (je suis plutôt JS/PHP) et j'ai une question un peu bête...

J'ai des éléments sur ma scène (non-créés via l'AS3 mais glissé dans Flash de la bibliothèque à la scène).
J'aimerai vider la scène pour appeler un autre SWF.
Hors quand j'essaie cela, impossible d'importer un SWF derrière.
while (stage.numChildren > 0) stage.removeChildAt(0);
//ou
stage.removeChild(0);



Un petit coup de pouce serait le bienvenu. Merci !

19 réponses

Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonjour,

il serait préférable, de laisser tes élements dans la bibliothéque, et de gèrer l'ajout a la scéne dans ton script avec addChild();

Cordialement
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Bonjour,
à vrai dire si j'utilise cette méthode c'est parce que je n'arrive pas à appliquer un drag/drop sur un loader.
Même si je le met dans un conteneur (sprite) et bien j'ai le message d'erreur me disant que le drag ne marche pas sur les loader.
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Il me semble que le drag d'un sprite n'a aucun lien avec son contenu.
Donc si ton sprite contient un clip,un loader, ou tout autre displayobject, il n'y a aucune différence.
Donc te probleme de drag n'est pas lié au loader.
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Je sais bien !

Et pourtant :
var scene:Sprite = new Sprite();
var testSprite:Sprite = new Sprite();

var urlImage:URLRequest = new URLRequest("image.jpg");
var monLoader:Loader = new Loader();
[...]
public function Enigme1():void {
addChild(scene);
monLoader.load(urlImage);
testSprite.addChild(monLoader);
scene.addChild(testSprite);
addListeners(testSprite);
}

private function addListeners(... objects):void {
for (var i:int = 0; i < objects.length; i++) {
objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
}
}

Me renvoi :
La propriété startDrag est introuvable sur flash.display.Loader et il n'existe pas de valeur par défaut.

Je n'y comprend rien....
Si tu pouvais m'éclairer
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
A mon avis, je supppose que le pb vient de l'affectation du startdrag dans ta fonction initié par l'event.
J'imagine que tu as codé:
event.target.startdrag();

Tu devrais alors tester
event.currentTarget.startdrag();

Cordialement
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Ça me renvoi :
La propriété startdrag est introuvable sur flash.display.Sprite et il n'existe pas de valeur par défaut.
génial.....


Rien de bien méchant pourtant :
private function dragObject(e:MouseEvent):void {
e.currentTarget.startdrag();
}



Aurais-tu une autre solution ?
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonjour,
Déja , je t'ai corriger ce pb de ciblage, car la sortie indique maintenant le bon objet.

apres la méthode c'est "startDrag()"
et pas" startdrag()"

cordialement
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Ho mince ! Merci beacoup pour ton aide :)

Une petite question encore, au relâchement l'objet continu de suivre la souris et au clic j'ai ceci :
[b]TypeError: Error #2007: Le paramètre hitTestObject ne doit pas être nul.
at flash.display::DisplayObject/_hitTest()
at flash.display::DisplayObject/hitTestObject()
at Jeu/stopDragObject()/b


(j'ai bien mis currentTarget partout : )
private function dragObject(e:MouseEvent):void {
getPosition(e.currentTarget);
e.currentTarget.startDrag();
}

private function stopDragObject(e:MouseEvent):void {
if (e.currentTarget.hitTestObject(getChildByName(e.currentTarget.name + "Target"))) {
e.currentTarget.x = getChildByName(e.currentTarget.name + "Target").x + 25;
e.currentTarget.y = getChildByName(e.currentTarget.name + "Target").y + 20;
testFin();
} else {
e.currentTarget.x = xPos;
e.currentTarget.y = yPos;
}
e.currentTarget.stopDrag();
}

private function addListeners(... objects):void {
for (var i:int = 0; i < objects.length; i++) {
objects[i].addEventListener(MouseEvent.MOUSE_DOWN, dragObject);
objects[i].addEventListener(MouseEvent.MOUSE_UP, stopDragObject);
}
}


J'ai fait plusieurs test, je comprend pas.
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
il faut declarer l'objet de comparaison avant de faire le hitest

private function stopDragObject(e:MouseEvent):void{
var test:Sprite=getChildByName(e.currentTarget.name+"Target")as Sprite;
if(e.currentTarget.hitTestObject(test)){
e.currentTarget.x=test.x+25;
e.currentTarget.y=test.y+20;
testFin();
}else{
e.currentTarget.x=xPos;
e.currentTarget.y=yPos;
}
e.currentTarget.stopDrag();
}
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Même message d'erreur.
test ressort null et le getChildByName prend instance19Target (avec e.currentTarget.name + "Target"). Sachant que instance19 n'est pas le nom de mon sprite draggé....

Je suis un peu perdu
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
ben remet event.Target
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Ça change rien...
Toujours le instance19Target et le null...
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Bon, j'ai fait pas mal de test et il en résulte ceci :

Lorsque l'objet vient de la bibliothèque et est importé "à la main" pas de soucis, le nom est le bon partout. La fonction test ressort [object MovieClip].

Lorsque l'objet est créé en AS3, avec un Loader qui importe une image externe, le tout dans un Sprite, le nom est "instanceX" avec currentTarget et "instanceX-1" avec target. La fonction test renvoi null.

Je ne sais pas ce qui se passe, quelque chose m'échappe...
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
en meme temps si tu defini pas la propriété name, ca risque pas de marcher.

lorsque tu declare ton sprite il faut definir ton name; mais je te conseille plutot d'utiliser l'id:

ton sprite1.id=0;
ton sprite2.id=1;

ton testarea1.name="t0";
ton testarea2.name="t1";

dans ta function stopdrag

private function stopDragObject(e:MouseEvent):void{
var test:Sprite=getChildByName("t"+e.target.id)as Sprite;
if(e.currentTarget.hitTestObject(test)){
e.currentTarget.x=test.x+25;
e.currentTarget.y=test.y+20;
testFin();
}else{
e.currentTarget.x=xPos;
e.currentTarget.y=yPos;
}
e.currentTarget.stopDrag();
}
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
Désolé pour le retard.
Si tu peux encore m'aider je t'en serait reconnaissant.

Je n'arrive pas à définir l'id (Accès à la propriété id peut-être non définie, via la référence de type static flash.display:Sprite).
J'ai utilisé le .name mais j'ai toujours l'erreur suivante :
Le paramètre hitTestObject ne doit pas être nul.

Je ne comprend pas pourquoi :(
Si tu pouvais m'aiguiller.
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
var test:Sprite = scene.getChildByName(e.target.name + "Target") as Sprite;
ou
var test:Sprite = scene.getChildByName(e.currentTarget.name + "Target") as Sprite;


test renvoi : null.
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
getChildByName(e.currentTarget.name + "Target")
renvoi aussi null
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
en meme temps si tu defini pas la propriété name, ca risque pas de marcher.

c'est pareil pour l'id.

A la création tu dois définir l'id , ou le name, sinon cela te retourne forcement null, si tu les appelle par la suite.
Messages postés
233
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
26 juin 2011
2
j'ai bien compris. mais j'ai ce message d'erreur (sur l'accès à l'id) lorsque je veux le définir.