36
Action Script 2.0 Instituto Superior Tecnológico SISE ActionScript 2.0

Manual Action Script

Embed Size (px)

DESCRIPTION

manual util

Citation preview

  • ActionScript2.0

    InstitutoSuperiorTecnolgicoSISE

    ActionScr ipt2.0

  • ActionScript2.0 2

    INTRODUCCIONEl ActionScriptesel lenguajedeprogramacinque hautilizadoFlashdesdesuscomienzos,yqueporsupuesto,empleaFlashCS3.Agrandesrasgos,podemosdecirqueelActionScriptnospermitirrealizarconFlashCS3todoloquenospropongamos,yaquenosdaelcontrolabsolutodetodoloquerodeaaunapelculaFlash.Absolutamentedetodo.

    Todo lo referente a este manual hace referencia a la versin 2 de ActionScript, aunque enalgunosmomentospodrsversuequivalenciaenAS3.

    CARACTERISTICASGENERALES

    Como ya hemos comentado, el ActionScript es el lenguaje de programacin propio deFlash,talycomoelLingoloesdeMacromediaDirector,porejemplo.ElActionScriptestbasadoenlaespecificacinECMA262,aligualqueotroslenguajescomoJavascript.

    ElActionScriptes,comosunombreindica,unlenguajedescript,estoquieredecirquenohar falta crear un programa completo para conseguir resultados, normalmente laaplicacin de fragmentos de cdigo ActionScript a los objetos existentes en nuestraspelculasnospermitenalcanzarnuestrosobjetivos.

    ElActionScript es un lenguaje de programacin orientado a objetos, tiene similitudes, portanto, con lenguajes tales como los usados en el Microsoft Visual Basic, en el BorlandDelphi etc... y aunque, evidentemente, no tiene la potencia de un lenguaje puramenteorientadoaobjetosderivadodelCodelPascalcomolosanteriores,cadaversinseacercamsaunlenguajedeestetipo.As,laversin2.0estrenadaenFlashMX2004esmuchomspotenteymuchoms"orientadaaobjetos"quesuanteriorversin1.0.

    El ActionScript presenta muchsimos parecidos con el Javascript si conoce Javascript, lasintaxisyelestilodeActionScriptleresultarnmuyfamiliares.LasdiferenciasentreamboslenguajeslaspuedeencontrarenlaayudaqueacompaaalFlashCS3.

    En lamayorpartede lasocasiones,nosernecesario"programar" realmente,FlashCS3pone a nuestra disposicin una impresionante coleccin de "funciones" (de momentoentenderemos "funciones" como "cdigo ActionScript que realiza una funcindeterminada")ya implementadasquerealizanloquebuscamos,bastarconcolocarlasenellugaradecuado.

  • ActionScript2.0 3

    ELPANELACCIONES

    En Flash CS3, el Panel Acciones sirve para programar scripts con ActionScript. Esto es, quetodoloqueintrozcamosendichoPanelseverreflejadodespusennuestrapelcula.Debemostenerclarodesde unprincipioqueelPanel Accionespuede hacer referenciaaFotogramasuobjetos, de modo que el cdigo ActionScript introducido afectar tan slo a aquello a lo quereferenciaelPanel.

    ElPanelAccionessedivideen2partes,alaizquierdatenemosunaayudafacilitadaporFlashquenosdaaccesodeunmodorpidoymuycmodoatodaslasacciones,objetos,propiedadesetc.queFlashtienepredefinidos.Estoselementosestndivididosencarpetas,quecontienenasu vez ms carpetas clasificando de un modo eficaz todo lo que Flash pone a nuestradisposicin. Para insertarlos en nuestro script bastar con un doble clic sobre el elementoelegido.

    Alapartederechatenemoselespacioparacolocarnuestroscript,aquaparecerloquevayamosinsertando.Tambinincluyeherramientasdeutilidad,comolabsquedadepalabras,laposibilidaddeinsertarpuntosdecorte,laherramientaRevisarSintaxisylaayudadeFlashparaActionScript.

    ElPanelAccionesdeFlashCS3,notienenicamenteunmododeedicin.Lalibertaddelmodo"Experto"estotalyportanto,tambinloeslaposibilidaddecometerfallos,paraasegurarnosdeque nuestro script es correcto, al entrar en Modo Experto nos aparecer un icono con el

    siguiente aspecto: Al pulsarlo Flash revisa nuestro cdigo en busca de posibles errores,indicndonos,ensucaso,lalneaquepresenteelerroryenquconsisteste.Esunfallocomnpasarsehorasbuscandoporqunuestrapelculanofuncionacorrectamenteyque el motivo sea que un error de sintaxis ha invalidado todo el cdigo existente en unfotograma, que acta como si no hubiera NADA DE CDIGO en l. Pongamos pues, muchaatencinenestoyrevisemoselcdigoconcienzudamente.

  • ActionScript2.0 4

    El uso del modo en asistente es mucho ms sencillo para ello pulsa el botn Asistente deScript y selecciona los comandos que quieras incluir, aparecern las opciones que debersrellenar para que estos comandos funcionen correctamente y el cdigo se generarautomticamente.Estaesunamuybuenautilidadrecuperadaquepermitiralosusuariosqueacabandeempezarelusodeestelenguaje.Aunasesrecomendablesiemprerepasarelcdigoyas irnosfamiliarizandoconlydeestemodopoderpocoapococrearnuestropropiocdigoenmodoExperto,loquenosdarmayorflexibilidadalahoradecrearnuestraspelculas.

    OPERADORES

    EsuntipodecarcterquerealizaunaaccinespecialdentrodeunaexpresindeActionScript.Unaexpresinnoesmsqueunconjuntodeoperadores, variablesyconstantesrelacionadosentresdeunciertomodo.FlashCS3sacarunresultadodetodaexpresinqueencuentreennuestrapelcula.

    Ejemplo:

    x=3 Esunaexpresincuyoresultadoserasignarlealavariable'x'elvalor3y=5+x Esunaexpresincuyoresultadoserasignarlealavariable'y'lasumadela

    constante 5ylavariable'x'

    A. OperadoresAritmticos

    SIGNO DETALLE+ Suma Resta* Multiplicacin/ Divisin

    % MdulooResto

    B. OperadoresdeAsignacin

    SIGNO DETALLEX=10 A la variable X se le asigna el

    valorde10

  • ActionScript2.0 5

    X+=3 Alavariable X selesumaelvaloranteriorde X ms3

    C. OperadoresdeComparacin

    SIGNO DETALLE== Igualque> Mayorque= Mayoroigualque

  • ActionScript2.0 6

  • ActionScript2.0 7

    ACCIONES

    Las Acciones son funciones predefinidas de ActionScript, es decir: Flash CS3 las crea, ynosotrosslotenemosqueusarlasdelamaneraquesenosindica.Notenemosquedefinirlasfunciones ni nada por el estilo, ni siquiera necesitamos saber cmo estn hechas. Loimportante es que estn listas para usar, lo que facilita el uso de este lenguaje deprogramacinysobretodo,hagamuyrpidocomenzaraprogramar.

    1. ControldePelcula:Paracontrolarelflujodenuestrapelcula,estoes,paraindicaraFlash en todo momento qu fotograma tiene que mostrar, cundo tiene que parar,dndeseguiretc.

    a. gotoAndPlay / goto: La accin que realiza consiste en mover la cabezalectoraalfotogramaqueleindiquemos.Lacabezalectoraesloquedeterminaqu fotograma de nuestra pelcula se est reproduciendo en cada momento.Si, por ejemplo, lo movemos del fotograma 1 al 25, lo que veremosinstantneamente ser el fotograma 25 y la pelcula continuarreproducindoseapartirdeah.

    gotoAndPlay("Escena2",7): Estaaccin lleva lacabeza lectoraalfotograma7delaescenallamada"Escena2".

    b. Play:Dacomienzoalareproduccindelapelcula,generalmenteporquealgolahadetenido.

    Play()

    c. Stop: Detiene la reproduccin de la pelcula. Se puede usar en un fotograma,cuando queramos detenernos en l (porque es un men, por ejemplo), en unbotn,(paraquedetengalapelcula)etc.

    Stop()

  • ActionScript2.0 8

    2. Navegador / Red: Estas acciones tiene diversas funciones, describimos las msimportantes:

    a. fscommand: Esta accin, es capaz de ejecutar ciertos comandos muypotentes. Lo ms cmodo es pasar a Modo Bsico (sino estbamos ya) einsertarla,nosaparecerunapestaaconlosposiblescomandosqueadmite:

    fullscreen :Siseactivaponenuestrapelculaapantallacompleta.MuytilparapresentacionesenCDRom,porejemplo.

    allowscale: Controla el redimensionamiento de los objetos insertados en lapelculacuandoelusuarioestiralosbordesdelamisma(odelapginaweben la que se encuentre) Queremos mantener las proporciones? Estecomandonospermitecontrolarlo.

    showmen:Sihasvistoelmenqueaparecealpulsarelbotnderechodelratn sobre una pelcula Flash, seguro que has pensado en hacerlodesaparecer ... puede que no interese que los usuarios puedan moverse asus anchas por nuestra pelcula. Ejecutando esta sentencia del modoadecuado(false),podremosocultarlo.

    trepallkeys:Sirveparadetectarlaspulsacionesdetodaslasteclasdurantelareproduccindenuestraspelculas.

    fscommand("comando","true/false")

    comando:Elcomandoaejecutar(fullscreen,allowscale,etc...)

    true / false: Aqu debemos escribir true o false, segn queramos desactivar laopcinoactivarla.

    fscommand("fullscreen","true") :Activalapantallacompleta.

    b. getURL:Estaaccinseempleaparaabrirelnavegadorwebyabrirlapginawebquedeseemos.

    getURL(url,ventana,"variables")

    url:Direccinwebalaquequeremosacceder(seabrirunaventana).

    ventana:ParmetroOPCIONAL.Modoenelquequeremosabrir laventana(enlaventanaactual(_self)enotranueva(_blank)etc...)

    Variables:ParmetroOPCIONAL,puedehabervarios.Silapginalopermite(esASP,PHPetc...)podemosenviarlevariables.

    Ejemplo:

    getURL("http://www.peru.com","_blank")

    c. loadMovie / loadMovieNum: Esta accin permite cargar nuevas pelculasFlash o imgenes en nuestra pelcula de forma dinmica (la pelcula secargarcuandoseloindiquemos,ynoantes).

    loadMovieNum(url,nivel/destino,variables)

    url:DireccinabsolutadondeestsituadalapelculaSWFolaimagenJPEG

  • ActionScript2.0 9

    Nivel / destino: Niveldonde cargaremosla pelcula, teniendo en cuenta que elnivelbsicoes el0, luegovael1yassucesivamente. Cadanivel superiorsesita delante del anterior y toma el control. Si lo usamos como destino, aqudeberemosintroducirelnombredelmovieclipdondecargaremoslapelculaoelnombre del marco si estamos cargando un fichero SWF en una pgina HTMLconmarcos.

    Variables:ParmetroOPCIONAL.Podemosenviarvariables.

    Ejemplo:

    loadMovieNum("MiPeli2.swf",0)

    Cargamoslapelcula"MiPeli2.swf"enelnivelprincipal.Noenviamosvariables.

    3. AccionesCondiciones

    Estasacciones sirvenparacontrolar la lgicade lapelcula.Sepuededecirquenospermiten"hablar"conFlashparaindicarleloquedebehacerantedistintassituaciones.Porejemplo,ahoraqueconocemosmuchasAcciones,CmoindicarleaFlashque"sila variable x = 3, entonces vaya al fotograma 5, y sino, vaya al fotograma 10"?.Sabemoscomparar,sabemosiralosfotogramas,peronosabemosdecirleaFlash"Sipasaesto,hazunacosa,ysino,hazlaotra...".Veamoscmodecrselo:

    a. if...else:Sipartimosdequelatraduccinliteraldeifes"si..."yladeelsees"sino...",nosencontramosderepentecontodaslasherramientasparadecirleaFlash:"si(pasaunacondicion){hazesto}sino{hazlootro}"

    VeamosantesquenadasuUsoparacomprenderlomejor:

    if(condicin){sentencias1...}else{sentencias2...}

    if:Indicaqueaccinquevieneacontinuacinesunacondicional

    Condicin: Indica una condicin que DEBE cumplirse para quesucedan las acciones indicadas en "sentencias1". Si stas no secumplen, entonces lo que sucede es lo especificado en las accionesindicadasen"sentencias2".

    Paraqueunacondicinsecumpla,debetenercomoresultadotrue,olo que es lo mismo, verdadero, o lo que es lo mismo, 1. De ah laimportancia de los operadores de comparacin y el valor quedevuelven.

    sentencias1: Conjunto de acciones que sucedern si la condicin seevala como verdadera. Si hay ms de 1, deben incluirse todasENTRELLAVES

    else: Especifica la alternativa si condicin se evala a falso. EsOPTATIVO.Sinoexiste,ynosecumplelacondicin,noseharnada,puesnolohemosespecificado.

    sentencias2: Conjunto de acciones que sucedern si la condicin seevala como falsa. Si hay ms de 1, deben incluirse todas ENTRELLAVES

    Ejemplo:

    if(x==2){gotoAndPlay(6)}

  • ActionScript2.0 10

    Si la variable x vale 2, entonces saltamos al fotograma 6, sino, nohacemosnada

    if(y>7){Stop()}else{gotoAndPlay(1)}

    Silavariableyesmayorque7,paramoslapelcula,sino,volvemosalfotograma1.

    LOSOBJETOS

    Los Objetos, como ya hemos visto en el tema bsico, son instancias de una determinadaclase.Estoes,sonrepresentantesdeunaclaseyadefinida.As,sonobjetos,porejemplo,unbotn, un clip de pelcula, un grfico o un sonido, es decir, que prcticamente TODO es unOBJETOenFlashCS3.

    VamosaverlosobjetosmsusadosenFlashyunabrevedescripcindecadaunodeellos.Comoyasehaexplicadoeneltemabsico,cadaobjetotieneunaseriedePropiedades(queveremosdespus)yunosMtodosyeventos,quedanfuncionalidadalosobjetos.Cuandouncomponente de Flash pasa a ser un objeto, automticamente pasa a tener todas laspropiedades definidas por Flash para ese objeto y pasa a reaccionar ante los Mtodos yeventosquetienedefinidos.Podemosencontrarunalistacontodaslaspropiedades,mtodosyeventosdelosobjetosenelPanelAcciones.

    1. Objeto"Button" (Botn):LosobjetosdetipoBotntienen4estados,comoyasehavisto en el captulo correspondiente y reaccionan ante mtodos especiales como"OnRollOver","OnPress"...quepermitirnquesucedancosascuandoelusuariohagaclicsobreestosbotones,paseelratnporencimaetc.Cuandonosinteresequeunaimagen que hayamos diseado se comporte como un botn, bastar convertirla abotnyyapodremosusarloseventostpicosdeunbotn.

    2. Objeto"MovieClip" (ClipdePelcula):CuandonecesitemoscrearunapelculaFlashdentrodeotrapelcula,peronoqueramos tener2 ficheros separados nimolestarnosen cargar una pelcula u otra, deberemos crear un objeto movieclip. Entre suspropiedadesespecialesdestacaquelosobjetos"clipdepelcula"tienen,internamente,unalneadetiemposquecorreINDEPENDIENTEMENTEdelalneadetiemposdelapelcula principal de Flash, lo que nos permite crear animaciones tan complejas eindependientes como queramos (podemos crear tantos clips de pelcula dentro deotroscomoqueramos,porejemplo).

    3. Objeto "Sound" (Sonido): Los objetos sonidos no son visuales, y por tanto, nopodremosvercomoquedanenlos fotogramas,al igualqueharamosconunbotnoun clip de pelcula. Deberemos controlarlos, por tanto, desde el Panel Acciones yusando ActionScript. Tienen multitud de mtodos especiales, muy potentes y tiles,podemos parar un sonido, crear un bucle, darle efectos sonoros etc. Podramos, porejemplo,crearunobjetodetiposonidoydespushacerquealpulsarunbotnsuene.

    4. Objeto"Mouse"(Ratn):ElobjetomouseesunodelosobjetosdeFlashqueyaestdefinido por Flash, pues hace referencia al ratn de Windows (al que manejar elusuarioqueveanuestrapelcula).Silousamos,podremosaccederalaspropiedadesdelratndeWindows,tipodecursos,efectosasociados,deteccindesuposicinetc.Vale la pena insistir en que su manejo NO es anlogo al de otros objetos como elbotn, pues podemos crear tantos botones como queramos y hacer con ellos lo quedecidamos,peroelobjetoMouseesnicoyactasobreel ratndelPCdelusuarioqueveanuestrapelcula.Sepuededecirqueesunobjeto"externo"quepermitequeotraspartesdelSistemaOperativointeractenconnuestrapelculaFlash.Portanto,esmuypotente.

    5. Objeto"Math" (Matemticas):Esunodelosmltiplesobjetos"abstractos"deFlash,niesvisual,niparecequecorrespondaanadaexistenteenelsistema(comoelobjeto

  • ActionScript2.0 11

    "Mouse").Sufuncinesmuyimportante,puesnospermiteusarfrmulasmatemticasdemodomuysencillo.

    6. Objeto "String" (Cadena): Es otro objeto peculiar, pues corresponde a un tipo dedatos. Los strings o cadenas son secuencias de caracteres. Si definimos unasecuenciadecaracterescomoobjeto de tipoString,podremosusar losmtodosqueFlash implementa sobre ellas: Seleccionar subcadenas de letras, buscar unadeterminadaletraenunapalabra,convertir lapalabraa letrasmaysculasyun largoetc.

    LASPROPIEDADES

    Los Mtodos suelen ser especficos de cada objeto, y su estudio requerira un nuevo cursocompleto, (recomendamos consultar la ayuda incorporada en el Flash CS3 cuando surjandudas),perohaybastantespropiedadesde losobjetosquesoncomunesamuchosde ellos.Vamosaverculessonlasmsusadasyqurepresentan.

    Para usar las propiedades, se debe colocar el nombre del objeto seguido de un punto ( . ) ydespuslapropiedadysuvalor.Laspropiedadessiemprecomienzanconunguinabajo(_).Algunas propiedades se pueden escribir sin el nombre del objeto al que hacen referenciadelante,enesecaso,harnreferenciaalapelculaprincipal.

    1. _alpha:Hace referenciaalaopacidaddelobjetoalqueafecte.Laopacidadsepuededefinircomolanotransparencia.Demodoqueun100%detransparenciaequivaleaun0deopacidad,oaun0dealpha.

    2. _framesloaded:Sonlosfotogramasdeunclipdepelculaodelapelculaprincipalqueel sistema lleva cargados en memoria. (Si se usa sin nombre de objeto delanteobtenemos los fotogramas cargados de la pelcula principal). Muy til para crearcargadoreso"preloaders".

    3. _totalframes:Devuelvelacantidaddefotogramasquecontieneelclipdepelculaalquehacereferencia.Siseempleasinningnnombredelante,nosdevuelve lacantidaddefotogramasdelapelculaFlashactual.Tambinusadoenlacreacindecargadores(eneltemasiguienteveremoscmoestaspropiedades).

    4. _height: Devuelve la altura del objeto en pxeles. Por ejemplo, si tenemos un clip depelculallamado"Clip1"yescribimos"Clip1._height"obtendremoslaalturadeClip1.Delmismomodo,podemoscambiarlasinmsquehacer:Clip1._height=100(laalturadelClip1pasaraaserde100pxeles).

    5. _width:Propiedadidnticaalaanterior,perodevuelvelaanchura.

    6. _visible:Determinasielobjetoestonovisibleennuestrapelcula.Cuandovale1,loest,cuandovale0,pasaaserinvisible.Esmuytilparahacerdesaparecerpartesdeuna pelcula en un momento determinado. Por ejemplo, si queremos que al pulsar unbotndesaparezcaelclipdepelculallamado"Clip2",haremosesto:.......Clip2._visible=0.......

    7. _x:ConestapropiedadobtenemoslascoordenadasdelobjetorespectodelejedelasX.Sirve para averiguar la posicin o para asignarla de forma dinmica (durante laejecucindenuestrapelculaFlash).

    8. _y:ConestapropiedadobtenemoslascoordenadasdelobjetorespectodelejedelasX.Sirve para averiguar la posicin o para asignarla de forma dinmica (durante laejecucindenuestrapelculaFlash).

  • ActionScript2.0 12

    Ejemplo:

    Useunbotnpreviamentediseado(odesdelaBibliotecaComn). Crearunsmbolo(Nombre:CUADRADOTipo:Clip),ydibujeunpequeocuadrado.

    Enelescenario,inserteunainstanciadelsmboloCUADRADO,ycoloquecomonombredeinstancia:cuadro.

    Declicalbotn,pulseF9paraactivarelPaneldeAccionesydigite:

  • ActionScript2.0 13

    DEMOSTRACIONDELUSODEACTIONSCRIPT

    CDIGOACTIONSCRIPTENBOTONES

    LosBotones(objetoButtonparaFlashCS3) tienenmuchautilidadsiemprequequeramosquenuestra pelcula interacte con el usuario. Dado que esto va a ser prcticamentesiempre, esconveniente estudiar y entender bien algunos cdigos tpicos que tendremos que usar paraconseguirnuestrospropsitos.

    TodosloscdigosquemostramosenesteapartadoDEBENinsertarsedentrodelobjetodetipoBotn(Button)conelqueestemostrabajando.Paraello,seleccionaremoselbotnencuestinydespus abriremos y editaremos el Panel Acciones, asegurndonos de que ste hacereferenciaanuestrobotn(loindicarlacabeceradeestePanel).

    1. Iraotrofotograma

    on(release){gotoAndPlay(15)

    }

    EstaaccinprovocaquealpulsarunbotnvayamosdirectamentealFotogramanmero15denuestrapelcula.

    LaprimeralneaindicaaFlashCS3que"alpulsarelbotn"hagaloqueestentrelasllaves" { ... } ".Estecdigoescaractersticodelosbotones ynospermitecontrolarelpulsadodelmismo.Dependiendodeloquecoloquemosentrelosparntesis, laaccinasociadaalbotnseproducirenunmomentooenotro.Enestecaso,hemosescrito"release"quesignificaquelaaccinseproducircuando, traspulsarnuestrobotn,elusuariodejedehacerclicconelratn.Lasegundalneaeslaaccinqueseproducir.Enestecaso,movemoslacabezalectoradeFlashalfotograma15.

  • ActionScript2.0 14

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    this.gotoAndPlay(15)}

    2. Abrirunaventanadelnavegador

    on(release){getURL("http://www.aulaclic.com","_blank")

    }

    Estaaccinprovocaquealpulsarunbotnseabraunanuevapginawebennuestronavegadorpordefectoynosmuestrelapginawww.aulaclic.comLaprimeralneatienelamismafuncinqueenelcasoanteriorLasegundalneaeslallamadaalnavegadorwebpropiamentedicha.LosparmetrosindicanladireccinURLquequeremosmostraryelmododeventanaquecontendralapginaweb.Enestecaso,seabrirunanuevaventanaindependientedelaactual.

    EnActionScript3:

    importflash.events.*importflash.net.*

    miBoton.addEventListener(MouseEvent.CLICK,miFuncion)varmiURL:URLRequest=newURLRequest("http://www.aulaclic.com")

    functionmiFuncion(event:MouseEvent):void{

    navigateToURL(miURL,"_blank")}

    3. Cambiandodetamao

    on(release){r1._width=350

    }

    Esta accin provoca que al pulsar un botn se modifiquen las propiedades del objetocuyonombredeinstanciaaparecedelantedelapropiedad.

    Laprimeralneatienelamismafuncinqueenelcasoanterior.En lasegunda lneapodemosver lapropiedad ._width (anchura), luegoesta llamadava a acceder a esta propiedad. Vemos que hay un operador asignacin ( = ), luegodeducimosquevamosaasignarunaanchuradeterminadaaunobjeto.Quanchura?Pues350,queeslacantidadqueapareceenlapartederechadelaexpresin.Yaquobjeto?Alquevadelantedel".",oloqueeslomismo,alafectadoporlapropiedad.

  • ActionScript2.0 15

    Portanto,alpulsarelbotnvamosamodificarlaanchuradelobjetor1,quepasaraserde350px.

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    r1._width=350}

    CDIGO ACTIONSCRIPT ENCLIPS

    LosClipsdePelcula(objetoMovieClip)sonpelculasdentrodepelculas.PuedentenercdigoASdentrodesmismos(aligualquelosbotones),aunquesuelesermscomnquealgnotrocdigoexterno(situadoenfotogramas)leshagareferencia.Paraqueelcdigoquecontenganlos clips de pelcula sea vlido, stos deben tener algn evento de clip asociado (Load,KeyDown etc) que determine cundo se ejecutar este cdigo (al cargarse el clip, al pulsaralgunatecla,etc.)

    1. Cargandoimgenesopelculas

    loadMovieNum("aulaClic.swf",0)

    Este cdigo AS situado dentro de un fotograma, provoca que nuestra pelcula Flashbusque una pelcula llamada "aulaClic.swf" EN LA CARPETA RAZ y la cargue en elnivel0,esdecir,enelmismonivelquelapelculaactual.

    La carpeta raz es la carpeta en la que est la pelcula principal (la que tiene estecdigo).

    loadMovieNum("mifoto.jpeg",0)

    Este cdigo nos permite cargar en un fotograma una imagen existente en nuestracarpetarazconextensin.JPEGdeunmododinmico.

    Pordinmicoentendemosentiempodeejecucin,loquesignificaqueeltamaodelapelcula no lo notar, ni tampoco la velocidad de descarga de nuestra pelcula. Slocuandohaga faltaver laimagenyseaccedaalfotogramaquerealiceestallamada,secargarlaimagenysepodrverenlapelcula.Lacargamosenelnivel0.

    Situviramoslaimagenenunacarpetallamada"Imgenes"queseencuentradentrodenuestrodirectorioraz,podramosaccederaelladelsiguientemodo:

    loadMovieNum("Imagenes/mifoto.jpeg",0)

    Esconvenienteremarcartambin,quelaimagendebeestarenformato.JPEG,nosirveelformato.JPG.

    2. Iraotrofotograma

    Lasiguienteaccindebeincluirsedentrodeunbotn,puessucederalhacerclicsobrel(deestemodoelejemploesmsprctico).

  • ActionScript2.0 16

    on(release){r1.gotoAndPlay(2)

    }

    Partimosdeunapelculacon2fotogramasdistintos.

    Enelprimerfotogramaestnelbotnyelclipdepelcula(r1)correspondientes.Elclipdepelculatieneensulneadetiemposunaanimacin,inicialmentedetenida.Veamosquepasasiseaccedeasufotograma2.

    En el segundo fotograma no nos importa lo que haya porque la accin situada a laizquierda no nos llevar hasta all. La cabeza lectora de la pelcula principal esINDEPENDIENTE.

    Esta accin provoca que al pulsar un botn vayamos al fotograma 2 de un Clip dePelculadeterminado.ElfotogramadelapelculaprincipalNOVARIAR.

    Laprimeralneaeslacomentadaanteriormente.

    Lasegunda lneaes laaccinqueseproducir.Flashbuscaunobjeto llamador1detipo clip de pelcula (movieclip) y mueve su cabeza lectora hasta el fotograma 2. LacabezalectoradelapelculaprincipalescompletamenteINDEPENDIENTEdelacabezalectoradelosclipsdepelculaynoseveralterada.

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    r1.gotoAndPlay(2)}

    MANEJODESONIDOSAunque laideadeobjetonosuele llevarnosa pensarenunsonido,enFlashCS3lossonidostambinsonobjetosypodemosmanejarlosusandoadecuadamenteActionScript.Veamosunoscuntoscdigosmuycomunesyuncompletoejemplodecmousarlos:

    /*Cdigo1*/musica=newSound()musica.loadSound("sonido.mp3",false)

    Estas2lneascarganunsonidoyledannombre.LaprimeralnealediceaFlashquevamosacrearunnuevoobjetodetipoSonidoyquesevaallamar"musica".Lasegundalneacargaunsonidodenuestrodiscodurollamado"sonido.mp3"ylocargadentrodelobjetomusica.Elsegundoparmetro"false"indicaqueesunsonidode"evento",yque,portanto,secargarcompletamenteantesdecomenzarareproducirse.

    /*Cdigo2*/musica.stop()

  • ActionScript2.0 17

    Estecdigodetieneelsonido"musica"alinstante.

    /*Cdigo3*/musica.stop()musica.start(0,99)

    Laprimeralneacomoyahemosvisto,detieneelsonido"musica".Lasegundalneaprovocaqueelsonido"musica"comienceareproducirse(start)apartirdesuposicin inicial (el0 indica lossegundos transcurridosdesdeelcomienzo)y lohaga99veces.(Estosellamaloopobucle).

    /*Cdigo4*/musica.stop()musica.start(0,0)

    Estecdigodetieneelsonido"musica"yacontinuacinloreinicia,reproducindoloslo1vez.Ahora que ya sabemos controlar los sonidos mediante ActionScript, veamos un ejemplo querenetodolovistoanteriormente.

    Enesteotroejemplo,tenemosunnico fotogramacon3botones.EnestefotogramatenemosinsertadoelCdigo1.Los3botonestienendistintasfuncionalidades:

    Enelbotnrojo,estinsertadoelCdigo2 Enelbotnazul,estinsertadoelCdigo3 Enelbotnverde,estinsertadoelCdigo4

    USANDOELOBJETOMATH

    Comoyasabemos,losobjetosnovisiblestambinsecontrolanconActionScript.VamosaveralgunosejemplosdelfuncionamientodelobjetoMathycomosacarlepartido.

    x=Math.random()

    ElMtodo"random"delobjetoMathgeneraun nmeroaleatorioentre0y1.Enestecaso,elresultadoloalmacenamosenlavariablex,parapoderusarlodespus.Lasutilidadesdeestemtodos son muchas,generarclaves secretas,passwords,nmerosdeloteriaetc...

    x=Math.round(4,3)

  • ActionScript2.0 18

    ElMtodo"round"REDONDEAelparmetrointroducidoeliminandolapartedecimaldelmismo.Enelejemplo,xpasaraavaler4.

    x=Math.max(5,2)

    ElMtodo"max"obtieneelvalormximoentre2nmeros.Enelejemplo,xpasaraavaler5.

    ElobjetoMathesmuytilynosahorramucho trabajo,pueshaymultituddeoperacionesquerespondenaalgunodesusmtodosynotenemosporquimplementar.

    CREANDOUNAPRECARGA

    Vamos a analizar el cdigo de un cargador o preloader para acabar de afianzar nuestrosconocimientosdeActionScript:

    Los cargadores o preloaders slo son necesarios cuando las pelculas adquieren un tamaoconsiderable y resulta inviable visionar la pelcula sin tenerla toda cargada (porque se atasca,aparecenpartesincompletasetc...).Vamosasuponerpues,quetenemosunapelculacon150fotogramas.Los3primeros los reservaremosparacrearnuestrocargador.EnelFotograma4comienzalapelcula.

    NOTA: Junto a cada lnea insertaremos comentarios (texto entre los smbolos /* y */) que sonlneasqueFlashreconocecomotalesyquenotieneencuentaa lahoradeejecutarelcdigo(escomosinoexistieran).Seusanparaclarificaryexplicarelcdigoqueescribamosyparaesolo usaremos a continuacin. Evidentemente no son necesarios en el cdigo que finalmenteinsertemosennuestrapelcula.

    Esteeselcdigoqueinsertaremos:

    HallamoseltamaodenuestrapelculaconlaAccin"getBytesTotal()"yloalmacenamosenlavariablebytes_totales.

    /*Fotograma1*/bytes_totales=getBytesTotal()

    Hallamos los bytes que llevamos cargados en memoria hasta el momento. Este valor loasignamosalavariablebytes_cargados.

    Estaeslalgicadelcargador.Sillevamoscargadosenmemorialosmismosbytesomsdelosqueocupalapelcula,ejecutamoslasiguientelnea.

    Si hemos llegado hasta aqu es porque toda la pelcula est cargada en memoria(bytes_cargados >= bytes_totales) y podemos comenzar a ver la pelcula. EjecutamosgotoAndPlay(4)quenosllevarhastaalfotogramadondecomienzalapelcula.

    Siaunnohemoscargadotodalapelcula

    Averiguamos el porcentaje que llevamos cargado realizando la divisin entre losbytes_cargadosylosbytes_totalesymultiplicndolopor100

    Almacenamosenlavariable"txt_salida"elporcentajequellevamosjuntoalsmbolo"%".Enlapelculaprincipaltendremosuncampodetextodinmicollamado"txt_salida"quenosmostrarelporcentajedepelculaquellevamoscargadoencadainstante.

  • ActionScript2.0 19

    /*Fotograma2*/bytes_cargados=getBytesLoaded()if(bytes_cargados>=bytes_totales){

    gotoAndPlay(4)}else{

    porcentaje=((bytes_cargados/bytes_totales)*100)txt_salida=Math.floor(porcentaje)+"%"

    }

    Si llegamos al fotograma 3 es porque no est cargada toda la pelcula, de lo contrarioestaramos ya en el fotograma 4. Como an no est cargada, volvemos al fotograma anteriorpara ver si ya lo est (mediante gotoAndPlay(2)). Esto lo haremos tantas veces como hagafaltaparadartiempoalordenadordelusuarioaircargandoenmemorialapelcula.

    /*Fotograma3*/gotoAndPlay(2)

    Resumiendo:Fotograma 1: En el Fotograma 1 se calculan los bytes totales que ocupa la pelcula.DespuspasamosalFotograma2.Fotograma 2: Cada vez que accedamos al Fotograma 2, nuestro cdigo ActionScriptaverigua los bytes que llevamos cargados en memoria y los compara con los totales(quesehallaronenelFotograma1ynovuelvenaaveriguarse,puesnovaran).Siyaest toda la pelcula cargada, vamos al fotograma 4 y comenzamos a reproducir lapelcula,sino,pasamosalfotograma3Fotograma 3: El Fotograma 3 volver a mandar la cabeza lectora al fotograma 2.Haciendoesteciclo,damostiempoalordenadoraircargandopocoapocolapelcula,hasta que llegue un momento que est toda cargada y pasemos al Fotograma 4. Elclculo del porcentaje es un "adorno" que nos permitimos, pues con un poco ms deesfuerzoaveriguamoscuntapelculallevamoscargadaylamostramosporpantalladeunmodoelegante(enporcentaje)haciendolaesperadelusuariomenosaburrida.Fotograma 4: Aqu comienza la pelcula... (Ya no se volver nunca a ninguno de losfotogramasanteriores).

    Aladerechamostramoselresultado.Lapelculasecomenzaracargaralpulsarelbotn.ElcdigoinsertadoesEXACTAMENTEelquesemuestraarriba,nohayNADAMS.Tanslose han aadido unos textos y unas imgenes para aumentar el tamao de la pelcula, de locontrariolacargaserademasiadorpidaynollegaraaverse.

    Tambinsehainsertadoeltextodinmicoquemuestraelporcentaje.

    Sielcargadornollegaaverse,lomsprobableseaqueyaestcargadaenlamemoriacachdelcomputador,dondelavelocidaddedescargaestanrpidaqueseranecesariaunapelculadevariosMBytesparaquehicierafaltauncargador.

  • ActionScript2.0 20

    NAVEGACION EN FLASH USANDOACTIONSCRIPT

    EnestetemaveremoslospuntosmsimportantesenlosquetepodrsapoyarpararealizartusanimacionesenFlashusandoActionScript.

    LaNavegacin est especialmente orientada a la web, pues veremos cmocrear elementosque ayudarn ms tarde a crear presentaciones, secciones, etc. Todo ello apoyado conanimacionesyvinculadasentres.

  • ActionScript2.0 21

    LOSBOTONES

    Unodeloselementosquemsnosvanaayudaralahoradeaadirinteractividadeneldiseoson los botones. En el ejemplo nos hemosayudado de los botones para crear la navegacinentrelasdiferentessecciones.

    As que el primer paso, despus de haber creado la interfaz de la pelcula en una capa, sercreareinsertarlosbotonesenunanuevacapaparatrabajarconmayorfacilidad.

    Paraasignarleunaaccinaunbotnesnecesariodarleunnombredeinstancia.Paraello(ycomohemosvistoenunidadesanteriores)escribimoselnombrequequeramos(alcualnosreferiremosms tardepara llamaralbotn)enel InspectordePropiedades,enestecaso lohemosllamadomiboton1.

    Luego, con el botn seleccionado, abrimos el Panel Acciones y aadiremos el cdigo quedeberrealizarelbotn.

    sta es la parte ms importante pues deberemos decidir a qu estmulo (o evento)responderelbotn. Existen varios eventos que son capturados en Flash, nombraremos losmsimportantes:

    press:ejecutalaaccinalpresionarseelbotn. release:ejecutalaaccinalsoltarseelbotn(despusdehaberlopresionado). rollOver:ejecutalaaccinaldesplazarelratndentrodelbotn. rollOut:ejecutalaaccinaldesplazarelratnfueradelbotn.

    Porello,escribiremosenelpanelaccioneselsiguientecdigoparanuestrosbotones:

    on(release){

    }

    Nota: ActionScript diferencia entre maysculas y minsculas, por lo que si escribes, porejemplo,Releasenoserreconocido.

  • ActionScript2.0 22

    Entrelasllaves{}introduciremoselcdigoquequeremosqueseejecutealproducirseeleventoseleccionadosobreelbotn.

    EnActionScript3:importflash.events.*miboton1.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{}

    MANEJADORESDEEVENTOENBOTONES

    Puedes manejar otros eventos adems de los mencionados anteriormente (press, release,rol lOveryrollOut),ysonlossiguientes:

    dragOut: se ejecuta cuando se presiona el botn y, sin soltarlo, el ratn se desplazafueradel.

    dragOver: seejecutacuando sepresionaelbotn y,sinsoltarlo,el ratnsedesplazafueradelparaluegovolverasituarsesobreste.

    releaseOutside: se ejecuta cuando se presiona el botn y, sin soltarlo, el ratn sedesplaza fuera de l y luego se suelta el botn del ratn. Observa que antes deproducirseesteeventosehanproducidoantesloseventosreleaseydragOut.

    Siguiendolamismasintaxispuedesaadirunmanejadordeeventosdeteclado:

    on(keyPress){

    }

    Deestemodo,sisepulsaseunatecladeterminadaseejecutaraunaaccin:

    on(keyPress){

    if(Key.getCode()==Key.RIGHT){

    //ejecutarcualquieraccin

    }

    }

    Enesteejemplo,cuandoseproduceunapulsacindeteclaseevalaenlasegundalnea.Silateclapulsadaeslaf lechaDerechaseejecutarlaaccindeterminada.

  • ActionScript2.0 23

    CONTROLESDELALINEADETIEMPO

    Unavezinsertadoslosbotonesydefinidosloseventossobre losquedebenactuar,tendremosquedecidirququeremosquehagan.Deestaformapodremoscreardinamismoentrenuestrassecciones.Imaginaquetenemoslasiguientelneadetiempo:

    ObservalacapaContenido.Enellaseencuentrantodoelcontenidodelassecciones.Deestaforma, si no aplicsemos ninguna accin sobre la lnea de tiempo, todas las secciones seejecutaranunaseguidadelaotra.Loquequeremosconseguiresqueseejecute laprimera(para mostrar la seccin principal) y el cabezal se pare hasta nueva orden (para mostrar lasegunda).Paraelloutilizaremoslafuncinstop().

    Esta funcinsirvepara pararelcabezalde la l neade tiempo dondeseacolocada.AsqueseleccionamoselltimofotogramadelaseccinyabrimoselPanelAcciones.

    Alldeberemosescribirnicamentelalnea:

    stop()

    Estoharquecuando laanimacin llegueaese puntosedetendra espera denueva orden.Nosotros hemos colocado las acciones en una capa aparte llamada Acciones para as poderacceder ms rpido a ella. El mtodo es el mismo, solamente habr que crear fotogramasclavesenaquellossitiosenlosquequeramosinsertarunstop().

    Ya hemos conseguido detener la presentacin. Pero, cmo hacemos que se muestre lasegunda?Muysencillo.

    Losbotonesnosayudarnadesplazarelcabezalporlalneadetiempo.Asquemodificaremoselcdigodeunodelosbotonesdondehabamosescrito:

    on(release){

    }

    Paraquesepuedaleerlosiguiente:

    on(release){gotoAndPlay(21)

    }

    Deestaforma,alhacerclicsobreesebotn,elcabezaldereproduccinsedesplazarhastaelfotograma21yreproducirapartirdeall.

  • ActionScript2.0 24

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{gotoAndPlay(21)}

    Siaadimosunstop()enelltimofotogramadelasegundaseccin,cuandostesereproduzcasepararyelcontenidopermanecerestticoenesperadeunanuevaorden.Existeotraforma,muytil,paranombrarlosfotogramas.Delmismomodoquedbamosunnombredeinstanciaaunbotnloharemosconunfotograma.

    BastaconintroducirunaEtiquetadefotogramaparapoderremitirelcabezalaste:

    Porejemplo:

    on(release){gotoAndPlay("impresoras")

    }

    EnActionScript3:

    importflash.events.*miboton1.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    gotoAndPlay("impresoras")}

  • ActionScript2.0 25

    Ademsdeestoscontroladorespodemosutilizartambin:

    gotoAndStop(fotograma),que situarelcabezalenelfotogramaindicado yparar lareproduccin.

    play(),queharquelareproduccinprosigaenelfotogramaenelqueseencuentreelcabezal.

    prevFrame(), que har que el cabezal retroceda al fotograma anterior al que nosencontramos.

    nextFrame(), que har que el cabezal avance al fotograma siguiente al que nosencontramos.

    ExistenloscontroladoresprevScene()ynextScene()quehacenavanzarelcabezalaescenasanterioresosiguientes.Asqueveremosqusonlasescenasparapoderutilizarlostambin.

    LASESCENAS

    Flashpermiteelusodeescenasparaseparardiferentestemasenunasolapelcula.Sesuelenutilizarsobretodoenanimaciones,dondeunapartedelaaccintranscurresobreunfondoylasiguientesobreotrocompletamentediferente.

    Deestemodopodemosusarlasescenaspararepresentardiferentesseccionesmuydiferentesen nuestra pelcula, por ejemplo, crear una escena para el cargador, otra para la pelculaprincipalyunaterceraparauna seccinquesediferenciecompletamentedel resto ynos seamscmodotrabajarconellaindependientemente.

    Apesardelhechodequelasescenassetrabajancomolneasdetiempodiferentes,alcrearelarchivoSWFstassealineanenordenreproducindoseunadetrsdeotra.

    Porello,alpublicareldocumentolosfotogramasdelasescenassenumerarnrespectoaesto.Es decir, si tenemos una primera escena que va del fotograma 1 al 50, la segunda escenacomenzarenelfotograma51.

    Todo esto hace que las escenas, en algunos casos estn desaconsejadas por las siguientesrazones:

    Elusodeescenasobligaalusuarioadescargareldocumentoensutotalidad,apesardequeesposiblequenonavegueportodaslassecciones.Existe laposibilidad,comoveremos ms adelante, de cargar en cualquier momento archivos SWF parareproducirlosenlapantallaprincipal.Deestaformaemularamoselusodelasescenascargandodiferentesdocumentosdependiendodelaseccinamostrar.

    Cuando aadimos ActionScript a nuestras escenas el resultado puede ser, a veces,imprevisible.Comohemosexplicadoanteriormente,alcrearseunarchivoconunalneadetiempocontinualasaccionesarealizarpuedenserinesperadas.

    EnelPanelEscena(MenVentana,Otrospaneles,Escena) podrs ver las escenas actuales de lapelcula.

  • ActionScript2.0 26

    Enprincipiosolamenteencontrarsuna(Escena1),esposibleaadirmsescenaspulsandoelbotn Aadir escena . Para cambiar el nombre de una escena haz doble clic sobre sunombre en el panel y escribe el que quieras. Puedes eliminar una escena utilizando el botnEliminarescena oduplicarlaconelbotnDuplicarescena .

    Como hemos comentado antes (y si no existe cdigo ActionScript que modifique esto) lasescenassereproducenunadespusdelaotraenelordenenelqueseencuentranenelPanelEscena. Puedes cambiar este orden con solo arrastrar y colocar la escena en cuestin en sulugarcorrespondiente.

    Trabajarconunaescenaesmuysencillo,bastaconseleccionarlaenelpanelysucontenidosemostrar en el Escenario. Podrs trabajar con ella como si se tratase de una pelculaindependiente.

    PeroveamoscmopodemosutilizarActionScriptparadesplazarnosdeescenaaescena.Anteshemos mencionado las funcionesprevScene() y nextScene(). Estos comandos hacen que elcabezaldereproduccinsedesplacedeunaescenaaotraenelordenenelqueseencuentranenelPanelEscena.

    Pero existe otra posibilidad. Segn el ejemplo que estamos siguiendo creamos una nuevaescenallamadaescena_otros.EnelbotnEnlaceRecomendadohemosaadidoelsiguientecdigo:

    on(release){gotoAndPlay("escena_otros",1)

    }

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    gotoAndPlay("escena_otros",1)}

    Conestoestamosindicandoquealsoltarseelbotnelcabezalsedesplacealfotograma1delaescenaescena_otrosyempieceareproducirseapartirdeall.

    LOSMOVIECLIPS

    Podemosutilizarlosparaincluirelementosennuestrapelculaconunaanimacinindependiente.Deestemodoaunquelapelculaprincipalestdetenidaelclipseguiractuandosegnsupropiocabezaldereproduccin.

    Existenmtodosparamanejarla lneadetiempodelosclips, idnticasalasanteriores,yqueveremosacontinuacin.

    Loprimeroquedeberemosaprenderesaaccederalaspropiedadesymtodosdelosobjetos.Estoesunrecursomuyutilizadoperoalavezesmuysencillo.

  • ActionScript2.0 27

    Ejemplo:Queremos que al pulsar un botn el movieclip avance en su lnea de tiempo hasta sufotograma20.Elcdigoquedeberemosescribirenelbotnserelsiguiente:

    on(release){miClip.gotoAndPlay(20)

    }

    Fjateencmohemosescrito lafuncin.Primerohemos sealado elclipsobreelquequeremosactuarescribiendosunombredeinstancia:

    Ydespusdeaadirunpuntohemosindicadolafuncinqueseejecutar.

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    miClip.gotoAndPlay(20)}

    De esta forma (y como hemos visto en temas anteriores) podemos acceder a todas laspropiedadesdelclip.Escribiendoestalneaharemosqueelclipsehagainvisible:

    on(release){miClip._visible=false

    }

    EnActionScript3:

    importflash.events.*miBoton.addEventListener(MouseEvent.CLICK,miFuncion)

    functionmiFuncion(event:MouseEvent):void{

    miClip._visible=false}

  • ActionScript2.0 28

    Para hacerlo un poco ms complicado podramos encontrarnos en el siguiente supuesto.ImaginaquetenemosunmovieclipllamadoclipPadre.DentrodeesteclipdepelculatendremosmssmbolosyunodeellospuedeserotromovieclipllamadoclipHijo.

    Cmo accedemos a las propiedades y funciones de clipHijo? Muy fcil. Suponiendo queestamos trabajando desde la pelcula principal donde tenemos insertado el clipPadre,escribiremoslosiguiente:

    clipPadre.clipHijo.play()

    AsharemosquelareproduccindeclipHijosereaunde.

    Pero,qupasasiqueremosejecutarlaordendesdedentrodeclipPadre?ImaginaquedentrodelmoviecliphayunbotnyelclipclipHijo.Queremosquealpulsarelbotnsereproduzcaelfotograma20declipHijo,entoncesdeberamosescribirlosiguienteenlasaccionesdelbotn:

    on(release){

    clipHijo.gotoAndPlay(20)

    }

    Como puedes ver esta vez no hemos mencionado a clipPadre en la lnea de cdigo. No esnecesarioporqueyanosencontramosdentrodel.

    Tambin podemos referenciarnos a elementos superiores utilizando la palabra reservada_parent. De este modo si nos encontrsemos dentro de clipHijo y quisisemos avanzar alfotograma20declipPadredeberamosescribir:

    this._parent.gotoAndPlay(20)

    Donde this indica el clip donde nos encontramos y _parent hace que nos coloquemos en elnivelinmediatamentesuperior.

    Deestaforma,slodeberemosescribirla rutadecontenedoresopadreshastallegaralobjetodelcualqueremosmodificaroejecutarunmtodo.

    Por lodems,el funcionamientodeun clipnosediferencia ennadaa la lnea de tiemposdecualquier otra pelcula. Podemos etiquetar los fotogramas de igual modo para llamarlosdirectamenteporsunombre:

    miClip.gotoAndStop("etiqueta")

    Y saltarde fotogramaafotogramaparamanejarlasanimacionesde laformaenquenosotrosqueramos.

    Igual que vimos antes con los botones, los movieclips tienen manejadores que nos permitirnejecutarcdigodependiendodeloseventosqueseproduzcansobreellos.

  • ActionScript2.0 29

    Losquemsutilizaremossern:

    mouseMove:seejecutacuandoel ratnsemuevesobreelfotograma.Puedesutilizarlas propiedades _xmouse e _ymouse para averiguar la posicin del ratn en esemomento.

    mouseDown:seejecutacuandosepresionaelbotndelratn. mouseUp:seejecutacuandosesueltaelbotndelratn. keyDown:seejecutacuandosepresionaunatecla. keyUp:seejecutacuandosesueltaunatecla.

    EstosmanejadoresdeeventossedebendeutilizarconelcontroladoronClipEvent.Veamosunejemplo:

    onClipEvent(mouseUp){this._visible=true

    }

    Estebloquedecdigodebesituarseenlasaccionesdelmovieclip(igualquehacemosconlosbotones). Es por ello que al referirnos a la propiedad _visible escribimos antes this parareferenciarelclipencuestion.

    thissiempreharreferenciaalobjetodondeseencuentrelavariable.

    Nota:Estos manejadores son tan vlidosparamovieclipscomopara lapelculageneral ens,puespodramosconsiderarqueunapelculaesunmovieclipmsgrande.

    Tambin existen modos de capturar estos eventos sin tener que escribir el cdigo dentro delmovieclip.

    Seradelasiguienteforma:

    miClip.onPress=function(){miClip.play()

    }

    Estos eventos tienen que asociarse con una funcin (veremos este concepto en el puntosiguiente). Pero de esta forma podemos escribir el cdigo directamente sobre el fotograma ycontrolarcuandoseejecutaunaaccinsobreelmovieclip.

    Enelejemplo,elclipcomenzarareproducirseencuantosehagaclicsobrel.Veamoselconjuntodeeventosmsimportantesparalosmovieclips:

    onPress = function() {}: se ejecuta cuando se presiona el botn del ratn sobre elmovieclip.

    onRelease = function() {}: se ejecuta cuando se suelta el botn del ratn sobre elmovieclip.

    onRollOver = function() {}: se ejecuta cuando se desplaza el ratn dentro delmovieclip.

    onRollOut=function(){}:seejecutacuandosedesplazaelratnfueradelmovieclip. onKeyDown = function() {}: se ejecuta cuando se presiona una tecla con el clip de

    pelcularesaltado. onKeyUp=function(){}:seejecutacuandosesueltaunateclaconelclipdepelcula

    resaltado.

  • ActionScript2.0 30

    LasVariablesLasvariablessoncontenedoresdondepodremosalmacenarinformacinparatrabajarconella.Estainformacinpuedesermodificadayleda.

    Aunquepareceunconceptomuycomplejosuusoesbastantesencillo.

    En ActionScript existen 8 tipos diferentes de variables, los que ms utilizaremos sern lossiguientes:

    Boolean: o booleano, puede almacenar slo dos valores, o true (verdadero) o false(falso).

    Number:puedealmacenarnmerosenterosodecimales,positivosonegativos.Elsignodecimal en ActionScript es el punto (.). Podrs realizar operaciones matemticas conestasvariables.

    String: puede almacenar cadenas de caracteres, es decir, un conjunto de caracteresalfanumricos.LasvariablesdetipoStringdebenirentrecomillasdobles(").

    Paradeclarar(crear)unavariableslotendrsqueescribirlasiguientelnea:

    varnombreVariable:tipoVariable=valorVariable

    Veamoselejemploparaverlomsclaro.Haremosqueelclicsobreelmovieclipestrellasloseejecutesieldetallenoestanmostrado.

    Yalrevs.Quesloseejecuteelcdigoalhacercliceneldetallesisteseencuentrafuera.

    varestrella_activada:Boolean=true

    estrella.onPress=function(){if(estrella_activada==true){

    estrella.gotoAndPlay("desaparece")detalle.gotoAndPlay("aparece")estrella_activada=false

    }}

    detalle.onPress=function(){if(estrella_activada==false){

    estrella.gotoAndPlay("aparece")detalle.gotoAndPlay("desaparece")estrella_activada=true

    }}

    Fjateenlasdosprimeraslneas,sedeclarandosvariablesbooleanas.Unadicequelaestrellaseencuentraactivadaylaotraqueeldetalleseencuentradesactivado.

  • ActionScript2.0 31

    EnActionScript3:

    importflash.events.*varestrella_activada:Boolean=true

    estrella.addEventListener(MouseEvent.CLICK,funcion_desaparece)functionfuncion_desaparece(event:MouseEvent):void{

    if(estrella_activada==true){estrella.gotoAndPlay("desaparece")detalle.gotoAndPlay("aparece")estrella_activada=false

    }}

    detalle.addEventListener(MouseEvent.CLICK,funcion_aparece)functionfuncion_aparece(event:MouseEvent):void{

    if(estrella_activada==false){estrella.gotoAndPlay("aparece")detalle.gotoAndPlay("desaparece")estrella_activada=true

    }}

    Alhacerclicenelmovieclip estrellaseevalalavariableestrella_activadasistaesverdadera(true)entoncespermitequeserealicenlasacciones.Encasocontrario,saledelacondicin.Alentrarenlacondicinsedesplazanloscabezalesysemodificaelvalordelavariableafalsoparaquelaprximavezqueintenteentrarnopuedanejecutarselasacciones.

    EnelonPressdelclipdetalleseevaladenuevo lavariable.Estavezdeberaestaren falseporquesieldetalleestfueraesporqueyasehahechoclicsobrelaestrellayhapasadoporelanteriorbloque.

    Amedidaquevayamosavanzandoiremosusandootrasvariablesdediferentestipos.Versquesuusonodifieremuchoalquehemosexplicadoahora.

    Antes de terminar con este tema deberamos ver algo muy importante: el mbito de lasvariables.

    Estoes,elsitiodondepuedanutilizarselasvariables.

    Nota:Paraexplicarelmbitodelasvariablesutilizaremoslafuncintrace(variable)queenvaelcontenidodelavariablealPanelSalida.PuedesabrirestepaneldesdeVentanaSalida.

    Existen3mbitosdevariables:ellocal,elglobalyeldelneadetiempo.

    Las variables declaradas en la lnea de tiempo pueden utilizarse en cualquier fotogramaposteriorysucontenidosemantendrintacto.

    Porejemplo,declaramoslasiguientevariableenelfotograma1:

    varmiVariable:String="Estaesmivariable"

  • ActionScript2.0 32

    Yenelfotograma15colocamoslassiguienteslneasenelPanelAcciones:

    trace(miVariable)stop()

    Vers como al probar la pelcula en el Panel de Salida aparece escrito el contenido de lavariable.

    Tenencuentaquesideclaraslavariableenelfotograma2noestardisponibleenfotogramasanteriores,esdecirenel1.

    Las variables declaradas en un mbito local sirven slo para un bloque de funcin. Veamosesteejemplo:

    functionmiFuncion(){varmiVariable:Number=1trace(miVariable)miVariable=2trace(miVariable)

    }

    miFuncion()trace(miVariable)

    En el primer bloque definimos una funcin (hablaremos de ellas ms a fondo en el siguienteapartado).

    En esta funcin se declara una variable y se enva su contenido al Panel Salida. LuegomodificamoselcontenidodelavariableyvolvemosaenviarelcontenidoaSalida.

    Observaquedespusllamamosalafuncin,estoharqueseejecutesucdigo,porloqueenelPanelSalidasemostrar1y2.

    Luego intentamosenviarelcontenidodelavariableaSalidayel resultadoqueobtenemosesundefined.Estoesporquelavariablenoestdefinida,puessolamentelahabamosdeclaradoparaelbloquedelafuncin.

    Utilizandolasvariablesdeestaformaslopodremosaccederaellasdesdeelbloquedefuncindondeestndeclaradas.Unavezfueradestelasvariablesdejandeexistir.

    Las variables de mbito global son mucho ms flexibles, estn disponibles en cualquierfotogramayfuncin.

    Sumododedeclaracineslasiguiente:

    _global.miVariable="Estaesunavariableglobal"

    Podrsaccederaellaencualquiermomento.

    Lasvariablesglobalesnotienentipo,ypuedentomarcualquiervalor.

    Nota:Sienalgnsitiodeclarasunavariablelocalconelmismonombrequeunavariableglobalexistentenopodrsutilizarlaglobaldurantetodoelmbitoenelqueexistalalocal.

  • ActionScript2.0 33

    Comentaremos tambin la existencia de las variables de tipo matriz (o array). stas puedenalmacenardiferentesvariablesenunsoloobjeto.

    Veamosunejemploparaverlomsclaro:

    varmiMatriz:Array=newArray()

    miMatriz[0]="Lunes"

    miMatriz[1]="Martes"

    miMatriz[2]="Mircoles"

    miMatriz[3]="Jueves"

    miMatriz[4]="Viernes"

    miMatriz[5]="Sbado"

    miMatriz[6]="Domingo"

    Assiescribimos:

    Trace(miMatriz[5])

    SemandaralPanelSalidaelelemento5delarraymiMatrizenestecasoSbado.

    Losarraysempiezanpor0,asqueesconvenientequeteacostumbresarellenarlamatrizapartirdeesteelemento.Versqueconeltiempoteayudararealizaralgunasfunciones.

    Otrasformasdedeclarararrayssonlassiguientes:

    varmatriz2:Array=new Array("Lunes","Martes","Mircoles","Jueves","Viernes","Sbado","Domingo")

    O

    varmatriz3:Array=["Lunes","Martes","Mircoles","Jueves","Viernes","Sbado","Domingo"]

    AcontinuacinveamosotroejemplodelusodeArrays:

    varmiMatriz:Array=["Lunes","Martes","Mircoles","Jueves","Viernes","Sbado","Domingo"]vari:Numberfor(i=0i

  • ActionScript2.0 34

    Esta sentencia requiere de un valor inicial, una condicin que mientras se cumpla seguirrealizandoelbucleyunmtododeactualizacindelvalor.

    for(valorInicialcondicionmetodoActualizacion){

    Bloquedeinstrucciones}

    En el ejemplo hemos definido un bucle de 0 hasta 6 (que es el ltimo nmero que cumple lacondicinmenorque7)yquevayaaumentandodeunoenuno(i++).

    As el bucle se realizar 7 veces mostrando primero el elemento 0 de la matriz, luego elelemento1,luegoel2yashastallegaral6.

    PulsaelbotnAceptaryelcdigoActionScriptsegenerarsolo.Notendrsquehacernadams.

    LasFuncionesComo habrs visto en los ejemplos anteriores, una funcin es un bloque de cdigo quepodemosutilizarencualquierpartedelarchivoSWFconslollamarla:

    functionmiFuncion(){

    varmiVariable:Number=1

    trace(miVariable)

    }

    EnesteejemplohemoscreadounafuncinqueenvaelcontenidodelavariablemiVariablealPanelSalida.

    Podemosescribirlasiguientelneaencualquiermomentodespusdehaberpasadolafuncinyestaseejecutar:

    miFuncion()

    Comoves,crearfuncionesesbastantesencillo.Ademspodemoscrearfuncionesunpocomscomplejasenvindoleparmetros:

    functionenviaSalida(miVariable:String){

    trace(miVariable)

    }

    Siencualquiermomentoescribimos:

    enviaSalida("Hola!")

    SemostrarelmensajeenelPanelSalida.

  • ActionScript2.0 35

    El modo de crear funciones con parmetros es bastante intuitivo. Al crear la funcin debersindicar que tipo de variable le vas a enviar. En nuestro ejemplo hemos definido el parmetrocomodetipoString.

    DeestemodopodrsutilizarlavariablemiVariabledentrodelafuncinytrabajarconellacomoquieras.

    Parallamaralafuncinslodebersescribirsunombreyindicarleelparmetroquelequieresenviar.

    Puedescrearfuncionesconmsdeunparmetro,paraelloslotendrsquesepararstosporcomas:

    functionmiFuncion(parametro1:String,parametro2:Number,parametro3:Boolean){

    //cdigo

    }

    CARGANDOARCHIVOS

    Una vez vistos todos estos conceptos pasaremos a ver una funcin en concreto, la funcinLoadMovie.

    Esta funcin te permite modificar el contenido de un clip de pelcula y cargar en l otroarchivoSWFoinclusounaimagenconformatoJPG,GIFoPNG.

    Suusoeselsiguiente:

    miMovieClip.loadMovie("pelis/clip.swf")

    Con esto lo que hemos hecho es cambiar el contenido del clip miMovieClip y lo hemossustituidoporelarchivoclip.swfqueseencontrabaenlacarpetapelis.Essencillo,verdad?

    Tambinpuedesutilizarladeestaforma:

    loadMovie("archivo.swf",miMovieClip)

    Esunavariacindelaanterior,aquindicamosquarchivoqueremoscargarydnde.Sienvezde cargarlo en miMovieClip lo cargasemos en this se cargara en el clip en el que estcontenidalafuncin.Inclusosisteeselclipdepelculaprincipal.

    Elcdigoquehemosinsertadoenelbotnessencillo:

    on(release){

    loadMovie("mapa.swf",this)

    }

    Losparmetrosquelehemospasadosonelnombredelapelculaacargarysudestino(this,elpropioclipdondeestabaelbotn).

    Unalneaequivalentehubiesesidoesta:

    this.loadMovie("mapa.swf")

  • ActionScript2.0 36

    ParadescargararchivoscargadosconlafuncinloadMovieutilizaunloadMovie.Estonosservirparal iberaraunmovieclipdelapelculaoimagenquehabamoscargado,dejndolovaco.

    Susintaxiseslasiguiente:

    miClip.unloadMovie()

    o

    unloadMovie(miClip)

    Existe la posibilidad de cargar archivos de otra manera, en vez de indicando su destinoindicaremos su nivel. Esto es, vamos a cargar varios archivos en un mismo sitio y losdispondremos uno encima de otro, de forma que los que se encuentren en capas superiorestaparnalosdeabajo.

    ParaellodeberemosutilizarlafuncinloadMovieNum:

    loadMovieNum("primera.swf",0)loadMovieNum("segunda.swf",1)loadMovieNum("tercera.swf",2)

    Enesteejemplohemoscargado3archivosSWFenelmismositio.Lostresestarndisponiblesalavez,perolapelculatercera.swfserlaqueseencuentreenelnivelsuperior.

    Comopuedes ver,alnopoder indicarseundestino,debersintroducirestafuncindentro delclip que quieres modificar. Si fuese escrita en el cdigo del fotograma actuara directamentesobrelapelculaprincipal.

    Nota:Laspelculascargadasenelnivel0sernlasqueestablezcanlavelocidadytamaodefotogramas y su color de fondo para el resto de los fotogramas aadidos en nivelessuperiores.

    Podemos referirnos a pelculas cargadas en diferentes niveles y modificar sus propiedadesutilizandolasintaxis:

    _level1._visible=true

    Einclusollamaraobjetoscontenidosenesaspelculasaadiendo,simplemente,elnombredeinstanciadeste:

    _level1.miClip._visible=true

    Podemos descargar pelculas cargadas con la funcin loadMovieNum utilizandounloadMovieNum:

    unloadMovieNum(2)

    En esta funcin slo debemos indicar el nivel donde est situada la pelcula que queremosdescargarycadams.

    El uso de estas funciones es bastante sencillo y te ayudarn mucho en la eficiencia de tuspelculas.Tenencuentaloquedecamosantesdelasescenas.