Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Interazione c# flash e modifica proprietà simboli

    Salve a tutti,
    ho un problema da risolvere con flash e c#.
    Ho un filmato in flash in cui ho un cerchio il cui diametro deve essere settato dinamicamente
    dall'applicazione c#, usando il metodo SetVariable.

    Il codice actionscript per la comunicazione con c# che ho usato è riportato di seguito:

    codice:
    /////////////////////////////////////////////////////////////////
    // C-Sharp-Message-Broadcaster
    /////////////////////////////////////////////////////////////////
    _root.bcCSharpMessage = function (varName, oldVal, newVal)
    {
       arguments.callee.broadcastMessage("onCSharpMessage", newVal);
    }
    ASBroadcaster.initialize(_root.bcCSharpMessage);
    _root.onLoad = function ()
    {
       this.CSharpMessage = null;
       this.watch("CSharpMessage", this.bcCSharpMessage);
    }
    
    /////////////////////////////////////////////////////////////////
    // Test
    /////////////////////////////////////////////////////////////////
    // Receive from C-Sharp
    obj = new Object();
    obj.onCSharpMessage = function (strMessage)
    {
    	//MODIFICA PROPRIETA' SIMBOLO
    }
    _root.bcCSharpMessage.addListener(obj);
    Dal momento che ho letto che non è possibile accedere ad un simbolo grafico da actionscript, non potendogli assegnare un nome, ho creato il cerchio e l'ho convertito in movie clip.
    Ho provato a modificare le proprietà lì dove c'è scritto "MODIFICA PROPRIETA' SIMBOLO" con:

    codice:
    myCircle._height = int(strMessage);
    myCircle._width = int(strMessage);
    Ma non ottengo nessun risultato.
    Qualcuno saprebbe darmi qualche dritta?
    Thx

  2. #2
    allora se riesci a prendere il valore con questo disegni un cerchio passandoci la variabile raggio


    Codice PHP:
    raggio=50
    this
    .createEmptyMovieClip("circle2_mc"2);
    circle2_mc.lineStyle(00x000000);
    drawCircle(circle2_mc300200raggio);
    function 
    drawCircle(mc:MovieClipx:Numbery:Numberr:Number):Void {
         
    mc.moveTo(x+ry);
         
    mc.curveTo(r+xMath.tan(Math.PI/8)*r+yMath.sin(Math.PI/4)*r+x
    Math.sin(Math.PI/4)*r+y);
         
    mc.curveTo(Math.tan(Math.PI/8)*r+xr+yxr+y);
         
    mc.curveTo(-Math.tan(Math.PI/8)*r+xr+y, -Math.sin(Math.PI/4)*r+x
    Math.sin(Math.PI/4)*r+y);
         
    mc.curveTo(-r+xMath.tan(Math.PI/8)*r+y, -r+xy);
         
    mc.curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x
    -
    Math.sin(Math.PI/4)*r+y);
         
    mc.curveTo(-Math.tan(Math.PI/8)*r+x, -r+yx, -r+y);
         
    mc.curveTo(Math.tan(Math.PI/8)*r+x, -r+yMath.sin(Math.PI/4)*r+x
    -
    Math.sin(Math.PI/4)*r+y);
         
    mc.curveTo(r+x, -Math.tan(Math.PI/8)*r+yr+xy);

    quindi devi richiamarla quando hai letto i dati



    oppure anche questa
    Codice PHP:
    function drawCircle(xyradiuscWidth) { 
        
    mc _root.createEmptyMovieClip("circle"1); 
        
    mc.lineStyle(radius0x000000100); 
        
    mc.moveTo(xy); 
        
    mc.lineTo(xy+.15); 
        
    mc.lineStyle(radius-cWidth0x999999100); 
        
    mc.moveTo(xy); 
        
    mc.lineTo(xy+.15); 

    //x e y = coordinate centro cerchio 
    //radius = diametro 
    this.drawCircle(180,180,160,1); 
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  3. #3
    Ciao crescenzo, innanzitutto grazie per la risposta.
    Ho modificato il codice così.... e niente:

    codice:
    _global.raggio = 0;
    this.createEmptyMovieClip("circle2_mc",2);
    circle2_mc.lineStyle(0,0x000000);
    
    function drawCircle(mc:MovieClip, x:Number, y:Number, r:Number):Void {
         mc.moveTo(x+r,y);
         mc.curveTo(r+x,Math.tan(Math.PI/8)*r+y,Math.sin(Math.PI/4)*r+x,Math.sin(Math.PI/4)*r+y);
         mc.curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
         mc.curveTo(-Math.tan(Math.PI/8)*r+x,r+y,-Math.sin(Math.PI/4)*r+x,Math.sin(Math.PI/4)*r+y);
         mc.curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
         mc.curveTo(-r+x,-Math.tan(Math.PI/8)*r+y,-Math.sin(Math.PI/4)*r+x,-Math.sin(Math.PI/4)*r+y);
         mc.curveTo(-Math.tan(Math.PI/8)*r+x,-r+y,x,-r+y);
         mc.curveTo(Math.tan(Math.PI/8)*r+x,-r+y,Math.sin(Math.PI/4)*r+x,-Math.sin(Math.PI/4)*r+y);
         mc.curveTo(r+x,-Math.tan(Math.PI/8)*r+y,r+x,y);
    }
    
    _root.bcCSharpMessage = function (varName, oldVal, newVal)
    {
       arguments.callee.broadcastMessage("onCSharpMessage", newVal);
    }
    ASBroadcaster.initialize(_root.bcCSharpMessage);
    _root.onLoad = function ()
    {
       this.CSharpMessage = null;
       this.watch("CSharpMessage", this.bcCSharpMessage);
    }
    
    // Receive from C-Sharp
    obj = new Object();
    obj.onCSharpMessage = function (strMessage)
    {
    	raggio = int(strMessage);
    	drawCircle(circle2_mc, 300, 200, raggio);
    }
    _root.bcCSharpMessage.addListener(obj);
    Credo che la funzione drawCircle non la richiami affatto. A questo punto penso che il problema non sia tanto la funzione, visto che il risultato è uguale alla modifica diretta della proprietà.
    Eppure questa comunicazione con c# funziona se ho una casella di testo in flash e ci vado a mettere la "strMessage" che viene da c#.
    Qualche suggerimento??

  4. #4
    cioè nn ho capito...?!

    ma ricevi la variabile da c#??

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  5. #5
    Originariamente inviato da crescenzo
    cioè nn ho capito...?!

    ma ricevi la variabile da c#??

    Si, con la casella di testo dinamica riesco a settare il testo proveniente da C#, quindi
    la variabile di tipo stringa la ricevo.
    Negli altri casi devo convertire in numero quello che ricevo e lo faccio con int().
    Quello che mi chiedevo è se ci possono essere problemi di visibilità se l'handler di
    ricezione delle info da c# è un metodo di un oggetto (obj) e da lì io tento di
    chiamare una funzione.
    O cmq magari sbaglio a chiamare la funzione direttamente con
    nomefunzione(parametri) dall'handler?

  6. #6
    quindi ricevi la variabile giusto!

    beh nn vedo niente di sbagliato a meno che effettivamente quella variabile la vede come stringa e quindi nn va la funzione del cerchio

    facciamo una prova vediamo se vede la variabile come stringa
    facciamo una semplice operazione sulla variabile ricevuta magari la facciamo stampare a video oppure la mettiamo in una casella di testo

    Codice PHP:
    _root.bcCSharpMessage = function (varNameoldValnewVal)
    {
       
    arguments.callee.broadcastMessage("onCSharpMessage"newVal);
    }
    ASBroadcaster.initialize(_root.bcCSharpMessage);
    _root.onLoad = function ()
    {
       
    this.CSharpMessage null;
       
    this.watch("CSharpMessage"this.bcCSharpMessage);
    }

    // Receive from C-Sharp
    obj = new Object();
    obj.onCSharpMessage = function (strMessage)
    {
        
    raggio int(strMessage);
        
    //drawCircle(circle2_mc, 300, 200, raggio);
                
    raggio=raggio+50;
                
    trace(raggio)
    }
    _root.bcCSharpMessage.addListener(obj); 
    se l'operazione funge cioè ti restituisce la somma significa che vede tranquillamente la tua var come numero e dovrebbe essere tutto ok
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  7. #7
    Credo di aver capito dove sta il problema... solo che non so come risolverlo perchè
    non sono molto esperta di actionscript.
    In pratica, da c# uso il metodo SetVariable(varName, value).
    varName è il nome della variabile flash da settare.
    L'handler definito in flash per gestire l'evento di ricezione di dati da c# in realtà non
    esegue alcuna delle operazioni che vengono inserite all'interno, non fa altro che
    riportare nella variabile varName, il value mandato da c#.
    Ho fatto questa prova: ho creato due caselle di testo dinamico in flash
    una l'ho chiamata mytext, l'altra mytext2.
    Da c# ho fatto il setVariable("mytext", valore) e nell'handler ho fatto
    mytext2 = strMessage
    Il risultato che mi aspettavo era che settasse entrambe le caselle di testo a "valore",
    mytext perchè era settata da c# e mytext2 perchè nell'handler la settavo io.
    Invece solo mytext viene cambiata di valore.

    Insomma la morale è che dovrei creare una variabile globale in flash "dimensione"
    e poi fare il setVariable("dimensione", valore)
    per avere il valore da c#. Poi creo un movieclip con un cerchio e impongo che
    gli attributi _height e _width abbiano valore pari a "dimensione".
    E qui ho bisogno di aiuto! Se voglio che flash aggiorni continuamente le dimensioni
    del movieclip, ogni volta che viene modificato il valore da c# come posso fare?

    Un evento sulla modifica di "dimensione"?
    Un thread (!) separato che ciclicamente aggiorni il valore?
    Sto ragionando in termini di qualsiasi altro linguaggio di prg visto che non so
    come funzionano le cose in AS.
    Qualcuno sa aiutarmi?

  8. #8
    quindi in pratica vuoi che si aggiorni ogni tot tempo quella variabile??

    anche se alla fine nn ho capito bene se ricevi la variabile e ci puoi fare delle operazioni...cioè se la vede come numero.....


    cmq ci sta la funzione enterframe che può dare un controllo continuo ....

    _root.onEnterFrame=function(){

    cerchio._width=x
    cerchio._heigth=y

    }

    dove in questo caso x ed y sarebbe il tuo diametro
    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

  9. #9
    Ciao crescenzo,

    Originariamente inviato da crescenzo

    Codice PHP:
    _root.bcCSharpMessage = function (varNameoldValnewVal)
    {
       
    arguments.callee.broadcastMessage("onCSharpMessage"newVal);
    }
    ASBroadcaster.initialize(_root.bcCSharpMessage);
    _root.onLoad = function ()
    {
       
    this.CSharpMessage null;
       
    this.watch("CSharpMessage"this.bcCSharpMessage);
    }

    // Receive from C-Sharp
    obj = new Object();
    obj.onCSharpMessage = function (strMessage)
    {
        
    raggio int(strMessage);
        
    //drawCircle(circle2_mc, 300, 200, raggio);
                
    raggio=raggio+50;
                
    trace(raggio)
    }
    _root.bcCSharpMessage.addListener(obj); 
    Facendo questa prova confermo quello che dicevo prima, infatti anche
    facendo setVariable("raggio", valore) da c# le operazioni dentro l'handler non
    vengono effettuate e non vedo nessun trace (il trace dovrebbe aprire qualche altra finestra, giusto? funziona solo in modalità debug o test?)

  10. #10
    il trace funge solo in fase di debug magari usi una casella di testo dinamica e ci metti dentro il valore x vadere se funge anche attraverso il browser...

    la verità non è una meretrice che si getta al collo di chi non la vuole ma anzi essa è dotata di una così altera bellezza che anche chi sacrifica tutto per ottenerla non è sicuro di averla raggiunta !

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.