Adobe Flash: Formations & Forums: addChild d'un sprite sur un conteneur?? - Adobe Flash: Formations & Forums

Voir le contenu

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

addChild d'un sprite sur un conteneur??

#1 Utilisateur non-connecté   _brice

  • Ceinture Verte
  • Groupe : Membres
  • Messages : 115
  • Inscrit : 06-October 05
  • Version logiciel:CS3
  • Compétences: Développeur Actionscript 3.

Posté 14 September 2006 - 02:39 PM

Bonjour a tous;

alors je ne comprend pas je n'arrive pas a faire un truc tout simple : ajouter un sprite a une hbox
dois y avoir un truc qui m'echappe
pourtant le addchild prend bien en parametre un DisplayObject et Sprite est bien herité de DisplayObject
mais j'obtient une erreur de conversion de type :

Main Thread (Suspended: TypeError: Error #1034: Echec de la contrainte de type : conversion de flash.display::Sprite@2fbdc91 en mx.core.IUIComponent impossible.)


CODE
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit()">

<mx:Script>

    <![CDATA[
        private function doInit():void
            {
            var ligne:Sprite = new Sprite();
            ligne.graphics.beginFill(0x000000);
            ligne.graphics.drawRect(0, 0, 100, 100);
            ligne.graphics.endFill();
            hb.addChild(ligne);
            }
    ]]>
    
</mx:Script>

    <mx:HBox id="hb">
    </mx:HBox>
    
</mx:Application>

0

#2 Utilisateur non-connecté   thecaptain

  • Lost in AStorm
  • Groupe : Honoris
  • Messages : 9335
  • Inscrit : 25-June 02
  • Gender:Male
  • Location:Lausanne (VD - CH)
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 14 September 2006 - 03:28 PM

Salut,

La classe Sprite n'hérite pas de UIComponent smile.gif Donc il n'est surement pas possible de le faire (ce doit etre précisé dans la doc non ?)

@++
Lost in AStorm
0

#3 Utilisateur non-connecté   _brice

  • Ceinture Verte
  • Groupe : Membres
  • Messages : 115
  • Inscrit : 06-October 05
  • Version logiciel:CS3
  • Compétences: Développeur Actionscript 3.

Posté 14 September 2006 - 03:45 PM

en fait j'avais vu ca :

addChild () method
public override function addChild(child:DisplayObject):DisplayObject

et Sprite etant herité de DisplayObject je ne comprenais pas pourquoi ca ne marchait pas mais je viens de tomber la dessus :

Note: While the child argument to the method is specified as of type DisplayObject, the argument must implement the IUIComponent interface to be added as a child of a container. All Flex components implement this interface.

Mais alors comment faire pour afficher un sprite dans un container??
0

#4 Utilisateur non-connecté   thecaptain

  • Lost in AStorm
  • Groupe : Honoris
  • Messages : 9335
  • Inscrit : 25-June 02
  • Gender:Male
  • Location:Lausanne (VD - CH)
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 14 September 2006 - 03:48 PM

Re,

Alors il faut que tu fasse une classe qui hérite de Sprite et qui implément ladite interface wink.gif et après plus de problème !

@++
Lost in AStorm
0

#5 Utilisateur non-connecté   iteratif

  • Habitué
  • Groupe : Membres
  • Messages : 753
  • Inscrit : 18-August 04
  • Location:D'un autre monde
  • Version logiciel:F9 Flex2 Apollo
  • Compétences: Non communiqué.

Posté 14 September 2006 - 03:49 PM

Juste pour savoir, c'est pourquoi faire le Sprite ?

Si tu veux créer un conteneur, il te suffit de créer un classe qui hérite de UIComponent.

Voici un exemple : http://livedocs.macr...s/00001743.html

Ce message a été modifié par iteratif : 14 September 2006 - 03:53 PM

"Tout ce qui n'est pas donné est perdu"
0

#6 Utilisateur non-connecté   iteratif

  • Habitué
  • Groupe : Membres
  • Messages : 753
  • Inscrit : 18-August 04
  • Location:D'un autre monde
  • Version logiciel:F9 Flex2 Apollo
  • Compétences: Non communiqué.

Posté 14 September 2006 - 03:59 PM

Tiens et pourquoi pas faire :

Xml
 
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit()">
 
<mx:Script>
 
<![CDATA[
private function doInit():void
{
var ligne:UIComponent = new UIComponent();
ligne.graphics.beginFill(0x000000);
ligne.graphics.drawRect(0, 0, 100, 100);
ligne.graphics.endFill();
hb.addChild(ligne);
}
]]>


</mx:Script>
 
<mx:HBox id="hb">
</mx:HBox>

</mx:Application>
 


La classe UIComponent hérite de la classe FlexSprite qui elle meme herite de Sprite

voila wink.gif

Ce message a été modifié par iteratif : 14 September 2006 - 04:00 PM

"Tout ce qui n'est pas donné est perdu"
0

#7 Utilisateur non-connecté   _brice

  • Ceinture Verte
  • Groupe : Membres
  • Messages : 115
  • Inscrit : 06-October 05
  • Version logiciel:CS3
  • Compétences: Développeur Actionscript 3.

Posté 14 September 2006 - 04:45 PM

a bah voila c'est parfait ca icon_razz.gif
merci!
0

#8 Utilisateur non-connecté   beryllium

  • Ceinture Jaune
  • Groupe : Membres
  • Messages : 39
  • Inscrit : 06-November 06
  • Location:Au fond du Lot
  • Version logiciel:Flex Builder 3
  • Compétences: Développeur Actionscript 3.

Posté 15 December 2006 - 11:56 PM

Je me permet de faire remonter ce sujet car je me suis posé la même question que _brice, mais en supposant que je n'ai pas de HBox sur la scène au départ.

Précision : je viens de Flash 8 où j'aime démarrer avec une scène vide que je remplis au fur et à mesure en commençant par un this.createEmptyMovieClip qui me fournit ma base de travail (j'ai abandonné les root, quand même), ce qui est dans Flex totalement déplacé.
J'étais déjà super-content d'avoir trouvé tout seul le coup du creationComplete ="fonctionDeDemarrage()" puisqu'il n'y a pas d'endroit comparable au panneau action sur la première image de la timeline, mais que faire pour expliquer qu'on veut mettre sur la scène un DisplayObjectContainer ?
Je sais que ma question doit paraître farfelue à ceux qui sont des pros des IDE classiques, mais c'est cool d'être gentil avec ceux qui viennent de Flash 8 et qui font tout pour s'adapter... gourou.gif
0

#9 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 16 December 2006 - 01:27 AM

salut,

il suffit d'invoquer le addChild() directement sur l'application (this) au lieu de le faire sur le HBox (hb) smile.gif
0

#10 Utilisateur non-connecté   beryllium

  • Ceinture Jaune
  • Groupe : Membres
  • Messages : 39
  • Inscrit : 06-November 06
  • Location:Au fond du Lot
  • Version logiciel:Flex Builder 3
  • Compétences: Développeur Actionscript 3.

Posté 16 December 2006 - 01:57 AM

ah bon ?
quand j'essaie ça
CODE
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="doInit()">

<mx:Script>

    <![CDATA[
        private function doInit():void
            {
            var ligne:UIComponent = new UIComponent();
            ligne.graphics.beginFill(0x000000);
            ligne.graphics.drawRect(0, 0, 100, 100);
            ligne.graphics.endFill();
            this.addChild(ligne);
            }
    ]]>
    
</mx:Script>
    
</mx:Application>

dans mon fichier .mxml, j'ai droit à deux erreurs :

1180: Appel à une méthode qui ne semble pas définie, UIComponent.
1046: Ce type est introuvable ou n'est pas une constante de compilation : UIComponent.

C'est un problème de configuration ?

Question subsidiaire : comment Iteratif fait-il pour faire des jolis encadrés avec le code xml coloré ? icon_eek.gif

Ce message a été modifié par beryllium : 16 December 2006 - 01:55 AM

0

#11 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 16 December 2006 - 02:26 AM

CITATION(beryllium @ Dec 15 2006, 07:57 PM) Voir le message

dans mon fichier .mxml, j'ai droit à deux erreurs :

1180: Appel à une méthode qui ne semble pas définie, UIComponent.
1046: Ce type est introuvable ou n'est pas une constante de compilation : UIComponent.

C'est un problème de configuration ?

Il faut importer les les classes qui ne sont pas dans le même package que le fichier courant smile.gif
Actionscript
import mx.core.UIComponent;


CITATION(beryllium @ Dec 15 2006, 07:57 PM) Voir le message

Question subsidiaire : comment Iteratif fait-il pour faire des jolis encadrés avec le code xml coloré ? icon_eek.gif

Il utilise la balise [xml] bla bla bla [/xml ] wink.gif (sans l'espace)
Il y a aussi [as] pour l'actionscript wink.gif

@++
0

#12 Utilisateur non-connecté   beryllium

  • Ceinture Jaune
  • Groupe : Membres
  • Messages : 39
  • Inscrit : 06-November 06
  • Location:Au fond du Lot
  • Version logiciel:Flex Builder 3
  • Compétences: Développeur Actionscript 3.

Posté 16 December 2006 - 03:19 AM

Merci pour tout Liguorien, tu es d'une patience... ça marche, je me doutais de ce problème d'importation, mais pourquoi ne semble-t-il pas y avoir ce problème chez iteratif ou _brice ?
Je suis curieux, mais ces problèmes de ressources qui semblent être de temps en temps atteintes toutes seules et des fois seulement quand on les fournit, ça me perd un peu, surtout quand on joue avec les «source path» dans les prorpiétés du projet...
D'ailleurs, je trouve géant que dans les fichiers AS les imports s'écrivent tout seul quand on type des variables icon_eek.gif

Une fois que je me sentirai plus à l'aise, je crois que je vais lâcher Flash pour Flex, surtout que les composants ne sont pas disponibles pour Flash9 et que j'aimerais fignoler des choses avant la sortie officielle de Flash9, à l'aide d'AS3, ce qui me laisse peu de choix.

Pour les balises d'as et xml, c'est dommage qu'elles ne soient pas dans le menu quand on tape ses messages, faut les connaître icon_wink.gif

Ce message a été modifié par beryllium : 16 December 2006 - 03:20 AM

0

#13 Utilisateur non-connecté   liguorien

  • Habitué
  • Groupe : Honoris
  • Messages : 2202
  • Inscrit : 28-March 04
  • Gender:Male
  • Location:Montréal, Canada
  • Interests:développer des environnements multijoueurs
  • Version logiciel:FB3 Pro
  • Compétences: Développeur Actionscript 3.

Posté 16 December 2006 - 04:47 AM

CITATION(beryllium @ Dec 15 2006, 09:19 PM) Voir le message

D'ailleurs, je trouve géant que dans les fichiers AS les imports s'écrivent tout seul quand on type des variables icon_eek.gif

ça fonctionne aussi dans le MXML. Étant donné que je suis paresseux, je mets le curseur à la fin du nom de la classe à importer et je fais CTRL-SPACE + ENTER au lieu de me tapper l'import icon_razz.gif

0

#14 Utilisateur non-connecté   kikinaish

  • Ceinture Blanche
  • Groupe : Membres
  • Messages : 1
  • Inscrit : 21-March 07
  • Version logiciel:9

Posté 21 March 2007 - 12:47 AM

Il y a une combine simple pour tester une instance de class dérivée de Shape ou Sprite par exemple :

-- création de la classe

1) Créer par exemple une classe héritant de Shape (exemple Triangle)

-- le test de la classe

2)Faire un addchild d'une instance de Triangle dans une instance de UIComponent

3)Faire un addchild d'une instance de UIComponent dans un container (instance de Canvas ou autre)

Cela permet de tester des composants hérités de Sprite Shape etc assez rapidement.
pas besoin de se prendre la tête avec l'implémentation de l'interface.

Je trouve néanmoins le processus assez tordu (en effet Shape et Sprite héritent de DisplayObject donc logiquement pas d'erreur) mais c'est lié aux composants flex qui héritent tous de UIComponent ce qui donc rend cette conformité obligatoire.

Ex : de code
CODE

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import com.fxObjects.formes.Triangle;
            import mx.core.UIComponent;

            public function showTriangle():void{
            var triangle:Triangle = new Triangle();
            var uIComponent:UIComponent = new UIComponent();
            uIComponent.addChild(triangle);
            myCanvas.addChild(uIComponent);
            }
        ]]>
    </mx:Script>
    <mx:Canvas id="myCanvas" x="126" y="315" width="200" height="200" backgroundColor="#ff0080">
    </mx:Canvas>
    <mx:Button x="35" y="315" label="Button" click="showTriangle()"/>
    
</mx:Application>

0

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

1 utilisateur(s) dans ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)