Créer des instances avec Action Script

  • koivi
  • Novice
  • Novice
  • No Avatar
  • Inscription: Aoû 13, 2004
  • Messages: 23
  • Loc: Minnesota
  • Status: Offline

Message Août 13th, 2004, 2:26 pm

Comment puis-je créer une instance d'un symbole de la bibliothèque et de changer ses propriétés?

Ma première pensée a été que Id à créer et nommer une instance hors scène, puis pour le copier, renommer et modifier les propriétés. Est-ce que c'est ce qui doit être fait, ou puis-je créer une nouvelle instance directement les symboles de nom? Dans les deux cas, je ne sais pas comment Id créer la nouvelle instance que je veux le modifier.

Toute aide est grandement appréciée!
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Août 13th, 2004, 2:26 pm

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Août 13th, 2004, 6:00 pm

Clic droit sur le symbole dans la bibliothèque et sélectionnez «couplage»

Cela ouvrira un dialogue intitulée "Propriétés de liaison"

Il y aura 3 cases à cocher qui sont activés,

Vérifiez celui qui dit «Exporter pour ActionScript".

Cela permettra à la "Identifier" TextBox,

Entrez le nom d'identification que vous souhaitez utiliser pour appeler ce symbole avec ActionScript et cliquez sur "Ok"

Désormais, lorsque vous voulez utiliser ce symbole avec ActionScript, vous serait-il ajouter comme ça,

Code: [ Select ]
attachMovie("linkageID", "instanceName",0);

Où "liaisonID" est le nom que vous venez elle a donné, je les propriétés de liaison de dialogue, "instanceName" est ce que vous allez utiliser pour le modifier avec ActionScript, & 0 est la profondeur de la placer.

Vous pouvez modifier ses propriétés comme ceci,
Code: [ Select ]
attachMovie("linkageID", "instanceName",0);
instanceName._alpha = 50;
  1. attachMovie("linkageID", "instanceName",0);
  2. instanceName._alpha = 50;


Vous pouvez le joindre à movieClips aussi d'autres
Code: [ Select ]
myMC.attachMovie("linkageID", "instanceName",0);
myMC.instanceName._alpha = 50;
  1. myMC.attachMovie("linkageID", "instanceName",0);
  2. myMC.instanceName._alpha = 50;

Maintenant, il sera adosse à la profondeur 0 de myMC plutôt qu'en profondeur 0 de _level0.
Strong with this one, the sudo is.
  • koivi
  • Novice
  • Novice
  • No Avatar
  • Inscription: Aoû 13, 2004
  • Messages: 23
  • Loc: Minnesota
  • Status: Offline

Message Août 13th, 2004, 6:29 pm

AWESOME! Merci pour toutes ces infos. Maintenant, je pense que je peux enfin obtenir un code de base pour terminer le projet et la façon dont je veux le faire plutôt que de tenter de pirater les choses et de faire sloppy code qui est difficile à maintenir. :)
  • koivi
  • Novice
  • Novice
  • No Avatar
  • Inscription: Aoû 13, 2004
  • Messages: 23
  • Loc: Minnesota
  • Status: Offline

Message Août 14th, 2004, 6:45 am

Encore une question...Comment puis-je créer des noms d'instance? Ive tried:
Code: [ Select ]
instance_name = "point"+i;
attachMovie("map_point",instance_name,0);
instance_name._x=new_x;
instance_name._y=new_y;
  1. instance_name = "point"+i;
  2. attachMovie("map_point",instance_name,0);
  3. instance_name._x=new_x;
  4. instance_name._y=new_y;

Ce qui ne semble pas fonctionner, si je n'ai qu'un seul point d'être mis....
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Août 14th, 2004, 7:36 am

Essayez de remplacer que zéro avec je if thats une boucle.
Il semble que vous garder la mise MovieClips nouveau à la même profondeur 0.

C'est une autre façon,
Code: [ Select ]
attachMovie("map_point", "point"+i, i);/*note the variable being used for the depth*/
this["point"+i]._x=new_x;
this["point"+i]._y=new_y;
  1. attachMovie("map_point", "point"+i, i);/*note the variable being used for the depth*/
  2. this["point"+i]._x=new_x;
  3. this["point"+i]._y=new_y;


Fondamentalement, le [] moyen que ce soit l'équation entre [] équivaut à va être un MovieClip, objet, variable, ect .. Nom de l'intérieur de l'objet que l'AS est en cours de traitement.

il ya aussi,
_root [ "string" + variable]
_pare pas [ "string" + variable]
qui sont, le même marché mais le chemin qu'elle commence la recherche de ce qui est référencé est différent.
Strong with this one, the sudo is.
  • koivi
  • Novice
  • Novice
  • No Avatar
  • Inscription: Aoû 13, 2004
  • Messages: 23
  • Loc: Minnesota
  • Status: Offline

Message Août 23rd, 2004, 1:28 pm

Cela semble être un peu plus compliqué que je pensais que ce serait - en particulier après une semaine de vacances...

J'ai maintenant tout le code code nécessaire en place pour lire des données XML, puis placez un point sur la carte en utilisant un symbole de la bibliothèque:

Code: [ Select ]
var myXml = new XML();
var base_url="http://www.example.com/";
myXML.ignoreWhite = true;
myXML.onLoad = function(success) {
 if (success) {
  this = this.childNodes[0];
  // be sure we're inside the dataset node
  for (i=0; i<this.childNodes.length; i++) {
   // OK, all the points should be at this level
   if (this.childNodes[i].nodeName == "point") {
    // point data is here, get coordinates and scale accordingly
    point_x = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_x;
    point_y = _root.baseMap._yscale/100 * this.childNodes[i].attributes.coord_y;

    // get the other point data
    point_name = this.childNodes[i].attributes.name;
    point_description = this.childNodes[i].attributes.description;
    point_contents = this.childNodes[i].firstChild.nodeValue;
    point_id = this.childNodes[i].attributes.id;
    point_url=base_url+"?point_id="+point_id;
    inst="point"+i;
    
    // create the map point instance & set properties
    attachMovie("map_point",inst,i);
    _root[inst]._x = point_x;
    _root[inst]._y = point_y;
   }
  }
 } else {
  trace("Error, data not loaded.");
 }
};
myXML.load(base_url + "point_data.php");
stop();
  1. var myXml = new XML();
  2. var base_url="http://www.example.com/";
  3. myXML.ignoreWhite = true;
  4. myXML.onLoad = function(success) {
  5.  if (success) {
  6.   this = this.childNodes[0];
  7.   // be sure we're inside the dataset node
  8.   for (i=0; i<this.childNodes.length; i++) {
  9.    // OK, all the points should be at this level
  10.    if (this.childNodes[i].nodeName == "point") {
  11.     // point data is here, get coordinates and scale accordingly
  12.     point_x = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_x;
  13.     point_y = _root.baseMap._yscale/100 * this.childNodes[i].attributes.coord_y;
  14.     // get the other point data
  15.     point_name = this.childNodes[i].attributes.name;
  16.     point_description = this.childNodes[i].attributes.description;
  17.     point_contents = this.childNodes[i].firstChild.nodeValue;
  18.     point_id = this.childNodes[i].attributes.id;
  19.     point_url=base_url+"?point_id="+point_id;
  20.     inst="point"+i;
  21.     
  22.     // create the map point instance & set properties
  23.     attachMovie("map_point",inst,i);
  24.     _root[inst]._x = point_x;
  25.     _root[inst]._y = point_y;
  26.    }
  27.   }
  28.  } else {
  29.   trace("Error, data not loaded.");
  30.  }
  31. };
  32. myXML.load(base_url + "point_data.php");
  33. stop();


J'ai alors voulu ouvrir une URL quand un bouton a été cliqué, alors j'ai essayé ceci:
Code: [ Select ]
_root[inst].onRelease = function(){
 getUrl(point_url,"_blank");
}
  1. _root[inst].onRelease = function(){
  2.  getUrl(point_url,"_blank");
  3. }


Il ressemblait à ça allait travailler jusqu'à j'avais ajouté un second point de données. Maintenant, quand je clique sur un point (l'un d'eux), je vais à l'URL de la première. Un autre problème est que je prévois que je veux être en mesure de placer des étiquettes de texte à côté de la souris sur les points. Au départ, j'ai pensé que je pourrais simplement créer un "plus" cadre pour le symbole avec un champ texte dynamique et changer simplement le texte. Toutefois, je ne vois pas comment je pourrais obtenir que cela fonctionne, d'autant plus que les points seront rapprochés et l'étiquette devrait être beaucoup plus grand que l'actuel "point" qui est placé sur la carte.

Le film à ce jour est affiché ici (je l'ai jeté sur un serveur au travail pour l'instant):
http://waf.rangenet.com/test/test.swf

Son juste une carte de base avec les données XML en cours de lire - Rien de joli, et aucune fonctionnalité qui fonctionne pour le moment.

Quelqu'un peut-il m'aider ou au moins me diriger vers des documents de référence pour ce que j'ai besoin.

TIA!
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Août 23rd, 2004, 2:31 pm

Code: [ Select ]
getUrl(point_url,"_blank");

Depuis point_url n'a pas été faite comme une variable qui est local à ce stade, il utilise la même variable pour chaque point. (la dernière URL trouvé dans le fichier xml). (en fait toutes vos variables sont de cette manière, le _x et _y travail parce qu'elles sont utilisées avant qu'ils ne soient de nouveau changé)

En fixant le premier point, ce qui rend alors ces variables locales à ce moment, vous sautez un lot de maux de tête puisque vous serez en mesure de les référencer avec "this.varName". Ce qui les rend locaux pour les points vous permettra d'avoir un objet XML supprimer elle-même après toutes les autres actions sont menées aussi bien.

Code: [ Select ]
        var inst = "point"+i;
        _root.attachMovie("map_point",inst,i);
    _root[inst].x = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_x;
    _root[inst].y = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_y;

    // get the other point data
    _root[inst].name = this.childNodes[i].attributes.name;
    _root[inst].description = this.childNodes[i].attributes.description;
    _root[inst].contents = this.childNodes[i].firstChild.nodeValue;
    _root[inst].id = this.childNodes[i].attributes.id;
    _root[inst].__url=base_url+"?point_id="+_root[inst].id;
    
    // set properties from local variables
    
    _root[inst]._x = _root[inst].x;
    _root[inst]._y = _root[inst].y;
    _root[inst].onRelease = function(){
            getURL(this.__url,"_blank");
    }
  1.         var inst = "point"+i;
  2.         _root.attachMovie("map_point",inst,i);
  3.     _root[inst].x = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_x;
  4.     _root[inst].y = _root.baseMap._xscale/100 * this.childNodes[i].attributes.coord_y;
  5.     // get the other point data
  6.     _root[inst].name = this.childNodes[i].attributes.name;
  7.     _root[inst].description = this.childNodes[i].attributes.description;
  8.     _root[inst].contents = this.childNodes[i].firstChild.nodeValue;
  9.     _root[inst].id = this.childNodes[i].attributes.id;
  10.     _root[inst].__url=base_url+"?point_id="+_root[inst].id;
  11.     
  12.     // set properties from local variables
  13.     
  14.     _root[inst]._x = _root[inst].x;
  15.     _root[inst]._y = _root[inst].y;
  16.     _root[inst].onRelease = function(){
  17.             getURL(this.__url,"_blank");
  18.     }


Code: [ Select ]
_root[inst].onRelease = function(){
     getURL(this.__url,"_blank");
    }
  1. _root[inst].onRelease = function(){
  2.      getURL(this.__url,"_blank");
  3.     }

utilisant cet intérieur de la onRelease provoque la variable locale pour que ce point soit utilisé depuis = Function () ( nous a amené à la portée de cette MovieClip.
Strong with this one, the sudo is.

Afficher de l'information

  • Total des messages de ce sujet: 7 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 41 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC