Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97

    Problema sul mio primo progetto AS3

    Ciao Ragazzi. Mi sono deciso a trasformare finalmente un mio lavoro flash vecchio stile in un quasi completo progetto AS3 suddiviso in Main Class e classi varie .as e ho bisogno di qualche suggerimento.

    Vi prego di scusarmi se le mie domande appaio un pò "semplici" ma sono alle prime armi quindi abbiate pazienza e siate "umani"...

    Dunque.
    Stò costruendo una main class così:


    MainEsperto.as

    package
    {

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.SimpleButton;

    public class MainEsperto extends Sprite{

    public var ciakulsanteCiak = new pulsanteCiak();

    public function MainEsperto():void {

    addChild(ciak);

    ciak.visible=true;
    ciak.scaleX = .7;
    ciak.scaleY = .7;
    //ciak.rotation = 20;
    ciak.x = 350;
    ciak.y = -300;
    _sfondoVerde.visible=true;


    }

    }
    }


    in cui ho inserito un oggetto linkato a questa Classe

    pulsantCiak.as

    package {
    import fl.transitions.TweenEvent;
    import flash.display.Sprite;
    import flash.display.SimpleButton;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;
    import flash.events.MouseEvent;

    public class pulsanteCiak extends SimpleButton{



    public function pulsanteCiak() {

    onEnterCiak();
    }

    private function clikDownCiak(event:MouseEvent):void
    {
    goGoCiak(); //uscita ciak
    //enterCameraman(); //entrata cameraman
    //enterFausto();//entrata Fausto
    //enterFrame();// entrata Frame superiore
    }

    private function onEnterCiak():void
    {

    var enterCiak:Tween = new Tween(this, "y", Strong.easeOut, -240, 225, 3, true);
    enterCiak.start();
    this.addEventListener(MouseEvent.MOUSE_DOWN,clickD ownCiak);

    }



    private function goGoCiak()
    {
    var exitCiak = new Tween(this, "alpha", Strong.easeOut, 1, 0, 3, true);

    exitCiak.addEventListener(TweenEvent.MOTION_FINISH , removeCiak);
    }

    private function removeCiak(event:TweenEvent)
    {
    this.visible = false;
    }
    }

    }

    purtroppo mi da questo errore:

    pulsanteCiak.as, line 39 1120: Access of undefined property clickDownCiak.

    come mai non riesco a richiamare il mio metodo clickDownCiak dalla stessa classe? Dove sbaglio e quale è la soluzione?

    Sicuramente è una stupidata...



    Ciaociao

  2. #2
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    se hai riportato esattamente, ti manca una c in click

    codice:
    private function clickDownCiak(event:MouseEvent):void

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97
    infatti...and hai ragione...
    adesso ho un altro prob...

    perchè se cerco di fare:


    public function removeCiak(event:TweenEvent):void
    {
    trace("Ciak è arrivato e lo tolgo!");
    public var camera:Cameraman = new Cameraman();
    addChild(camera);
    camera.x = -0.5;
    camera.y = 119.1;
    camera.visible = false;
    }

    dall'interno tdi un metodo di una subclasse (pulsanteCiak.as) riferendomi a una altra subclasse (Cameraman.as) mi da questo errore?

    1180: Call to a possibly undefined method addChild.

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    perchè la tua classe non ha un metodo addChild

    immagino che quello che vuoi ottenere sia di fare l'addChild sullo stage no?!

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97
    Si and...
    sono disperatooooo sono ore che cerco di risolvere...
    ma le mie classi sono tutte subclassi di Sprite o MovieClip... come fano a non avere il metodo addChild?

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97
    oddio... pulsanteCiak è un SimpleButton... è un pulsante...

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da zizzolo
    oddio... pulsanteCiak è un SimpleButton... è un pulsante...
    ecco, ti sei risposto da solo

    comunque il problema è che devi intercettare lo stage dall'interno della classe e lo puoi fare attraverso la proprietà stage
    il problema è che fino a che l'istanza della classe non è stata creata ed attaccata sullo stage, la proprietà risulterà null
    un esempio su timeline:
    Codice PHP:
    var mc:MovieClip = new MovieClip();
    trace(mc.stage); // output: "null"
    addChild(mc);
    trace(mc.stage); // output: "[object Stage]" 
    chiaramente però nella classe non puoi determinare se l'istanza è stata attaccata o meno, perciò potresti incorrere in un errore
    per questo AS3 ti viene incontro aggiungendo l'evento Event.ADDED o meglio ancora nel tuo caso, visto che ti interessa attaccare sullo stage, Event.ADDED_TO_STAGE, che verificano il momento in cui un determinato DisplayObject è stato attaccato ed effettua delle azioni di conseguenza... spero che tutto il discorso sia abbastanza chiaro

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97
    in parte si ma alcune cose non mi sono chiare probabilemtne perchè non le conosco ancora...
    Una cortesia and...

    Puoi farmi un esempio pratico sugli script che ho inserito in alto?

    Grzie mille in anticipo :-)

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    no, ascolta preferisco non interferire con la logica degli script scritti da qualcun altro... piuttosto ti faccio un esempio semplicissimo estendendo come te il SimpleButton

    Codice PHP:
    package {
        
    import flash.display.MovieClip;
        
    import flash.display.SimpleButton;
        
    import flash.events.Event;
        public class 
    Test extends SimpleButton {
            private var 
    __clip:MovieClip;
            public function 
    Test(){
                
    __clip = new MovieClip();
                
    __clip.graphics.beginFill(0x00FFFF);
                
    __clip.graphics.drawRect(0,0,100,100);
                
    trace(stage); // output: null
                // se provo ad attaccare allo stage il __clip in questo momento, ottengo un errore
                // stage.addChild(__clip);
                
    addEventListener(Event.ADDED_TO_STAGE__added__);
            }
            private function 
    __added__(e:Event){
                
    trace(stage); // output: [object Stage]
                // mentre se lo attacco dentro la funzione comandata dall'evento Event.ADDED_TO_STAGE
                // la proprietà stage, ereditata dalla classe SimpleButton
                // viene "riempita" con il riferimento allo stage su cui verrà attaccata l'istanza della classe Test
                // di conseguenza, richiamando dentro un metodo della classe Test, il metodo addChild, legato allo stage
                // attaccherò correttamente sullo stage il __clip
                
    stage.addChild(__clip);
            }
        }

    e sulla timeline principale
    Codice PHP:
    var sb:Test = new Test();
    addChild(sb); 

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    97
    Grazie and adesso provo a capirlo e conformarlo sul mio.
    A primo acchito mi sempra di capire che la creazione dell'istanza va eseguita nella function principale del simpleButton, mentre l'addChild lo eseguo all'interno di un suo metodo.

    ma per timeline principale intendi la DocumentClass? e quella parte va aggiunta per forza?


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.