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
0
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.
0
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.
0
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
0

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
0
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 ?
0
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
0
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.
0
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();
}
0
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
0
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
0
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...
0
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...
0
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();
}
0
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.
0
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.
0
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
0
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.
0
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.
0
Rejoignez-nous