Vider la scène

cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 - 6 juin 2011 à 12:59
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 - 16 juin 2011 à 01:56
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

aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
6 juin 2011 à 13:08
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
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
6 juin 2011 à 14:15
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.
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
6 juin 2011 à 15:16
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.
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
6 juin 2011 à 19:20
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

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

Posez votre question
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
6 juin 2011 à 22:56
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
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
7 juin 2011 à 01:18
Ç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 ?
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
7 juin 2011 à 09:40
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
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
7 juin 2011 à 12:17
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.
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
7 juin 2011 à 14:57
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();
}
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
7 juin 2011 à 15:19
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
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
7 juin 2011 à 15:41
ben remet event.Target
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
7 juin 2011 à 16:14
Ça change rien...
Toujours le instance19Target et le null...
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
7 juin 2011 à 17:43
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...
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
7 juin 2011 à 18:18
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();
}
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
15 juin 2011 à 21:45
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.
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
15 juin 2011 à 22:06
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.
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
15 juin 2011 à 22:08
getChildByName(e.currentTarget.name + "Target")
renvoi aussi null
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
16 juin 2011 à 01:49
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.
cs_JackNUMBER Messages postés 233 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 26 juin 2011 5
16 juin 2011 à 01:56
j'ai bien compris. mais j'ai ce message d'erreur (sur l'accès à l'id) lorsque je veux le définir.
Rejoignez-nous