Flashhilfe.de - Flash Community

Mate Framework, View-Manager-loading-Prob [Flash 10]

 


AntwortenRegistrieren Seite1  

longCrew#1
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

19.11.2009, 17:01

hallo

MateFramework, Air-Proj.

ich habe folgendes prob:
ich übergebe meiner View daten fkt. jedoch nicht so ganz wie ich mir das vorstelle

lasse ich die zahl raufzählen dann fkt es in der view werden die zahlen raufgezählt.
jetz is aber so das meine var ChannelValue erst auf ne var warten muss (diese wird erst geladen) so jetzt aber fkt gar nichts mehr in meiner view bleibt hartnäckig der Wert 0 und diese blöde Zahl zählt nicht hoch wie sie sollte...

das prob wie ich festgestellt habe ist das mein ChannelValue erst aufn Wert warten muss bevor er hochzählen kann... bloß warum und warum wird meine view net mehr aktualisiert???

manager.as:
hier wird die var ChannelValue erstellt und dann auch werte hinzugefügt:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   
public var ChannelValue:Number = 0;
public function onSoundLoaded(event:Event):void
      {.  laden des SoundObjk.....//starten des timers
         soundTimer = new Timer(500);
         soundTimer.addEventListener(TimerEvent.TIMER, runTimerPos);
         soundTimer.start();
         
      }
      
      public function runTimerPos(event:TimerEvent):void
      {
      //   ChannelValue++;
         ChannelValue = Math.round(Channel.position);
         //trace -> zeigt das ChannelValue hochgezählt wird so wie er soll dur die geladene eigenschaft des Channels
            trace(ChannelValue);
}


      


so in meiner View wird hier nur noch 0 ausgegeben und das nur weil ich die var beim instanzieren auf 0 setze

woran liegt das wie kann ich das lösen das meine ChannelValue auch in der View der Wert angezeigt wird???????
die injector funktionieren denn wen nich einfach nur ChannelValue++ mache wird das auch in der View angezeigt .
Mach ich jedoch das hier: ChannelValue = Math.round(Channel.position);
wird in der View 0 angezeigt.
hier muss die Var Channel.posititon erst geladen werden ich glaube mal daran liegt es aber 1. warum fkt dann nix mehr??? u 2 wie löse ich das???

ich hoff ihr könnt mir helfen

mfg

so hab noch was rausbekommen bei den trace:

ruft der setter die channelValue auf ist diese NaN
trace ich den channelValue in der Klasse wo er erzeugt wird hat er den zugewiesen Wert.

Was stimmt da nicht das mein setter den Wert nicht übernimmt?
Die Lösung ist: das Suchen.
LongCrew = 2 people
Geändert von longCrew am 20.11.09 um 09:09 Uhr
Werbung
Beiträge: 0
Registriert: Feb 2016


badskill#2
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

21.11.2009, 19:03

Konntest du das Problem bereits lösen?
longCrew#3
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

21.11.2009, 20:17

Ne leider nicht hab viel versucht zb die zu ladende var solange auf null setzen bis sie geladen ist. Ist diese
geladen wird nicht der wert nicht übernommen sondern bleibt null.


Ich versteh net ganz was das prob ist mh...
Die Lösung ist: das Suchen.
LongCrew = 2 people
badskill#4
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

21.11.2009, 22:39

Ich habe das gerade getestet und es funktioniert wie erwartet.
ChannelValue ist Bindable?
Werbung
Beiträge: 0
Registriert: Feb 2016


longCrew#5
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

22.11.2009, 09:25

morgen badskill,

ja ich muss aber erst mal erklären wie es momentan ist.
Wenn ich im SoundManger meinen ChannelValue ermittle und diesen dann Bindable setzte bekamm ich folgende Fehlermedlung:
Severity and Description   Path   Resource   Location   Creation Time   Id
Implementation of interface 'flash.events:IEventDispatcher' cannot be added to class 'SoundManager', due to collision with existing method or property 'dispatchEvent'.   


Also habe ich eine extra klasse erstellt in der ich dann die ChannelValue ermittele, dieser Klasse wird der Wert getChannel aus dem SoundManger übergeben.
Hier ist ChannelValue Bindable und wenn ich meinen ChannelValue über ChannelValue++; ermittle wird dieser auch in der view hochgezählt.

Jedoch fkt es nicht mehr sobald ich ChannelValue in der abhänigkeit von getChannel-Var ausrechnen möchte weil wie gesagt getChannel erst geladen wird...

Wie hast du es angestellt das es fkt???

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
Geändert von longCrew am 22.11.09 um 09:27 Uhr
badskill#6
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

22.11.2009, 11:30

Ich habs ganz einfach gemacht. Beide Variablen Bindable und durch einen Injector verbunden. Fertig.
Anscheinend benutzt du eine Funktion mit dem Namen dispatchEvent. Das ist eine sehr schlechte Lösung und solltest du ändern.
longCrew#7
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

22.11.2009, 11:43

die Fkt benutz dispatchEvent benutz ich aber nicht im SoundManager sondern in der View der SoundManager erbt vom Dispatcher.

Warum ist dispatchEvent nicht so gut?

Also bei dir Fkt es auch wenn die eine var erst geladen werden muss?
Die Lösung ist: das Suchen.
LongCrew = 2 people
badskill#8
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

22.11.2009, 12:12

>>Also bei dir Fkt es auch wenn die eine var erst geladen werden muss?
Das spielt überhaupt keine Rolle, ob die Variable gefüllt ist oder nicht.

>>Warum ist dispatchEvent nicht so gut?
Ich interpretiere die Fehlermeldung so, dass du die Funktion in deiner Klasse deklarierst:
ActionScript:
1.... function dispatchEvent

Die Klasse EventDispatcher stellt diese Funktion aber selbst über Vererbung bereit. Deshalb die Kollision.
longCrew#9
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

22.11.2009, 12:42

mh aber ich deklar. nirgendwo im SoundManager die function dispatchEvent....
in meiner View werden die Events mit dispatchEvent(..) ausgelöst..
aber warum wird in meiner View die Zahl ChannelValue hochgezählt wenn ich sie durch ChannelValue++ ausrechne jedoch wenn ich CurrentValue = Math.round(thisgetPos); macht er überhaupt nichts in der View es bleibt immer der Standardwert 0 den ich zu beginn setzte....

soll ich dir mal meinen code zeigen?

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
badskill#10
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

22.11.2009, 12:50

soll ich dir mal meinen code zeigen?
Ja, bitte. Anders kommen wir hier wohl nicht so recht weiter.
longCrew#11
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

22.11.2009, 14:53

ok glaub ich auch;)

in der View habe ich folgende getter/setter für CurrentValue

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
         
         
      
            [Bindable] private var _ChannelValue:Number;
          
           [Bindable("getPosChanged")]
           public function get ChannelValue() : Number
           {
               return _ChannelValue;
               trace(".......................................getter in View");
           }
            
   
          public function set ChannelValue( ChannelValue:Number ) : void
           {
               _ChannelValue = ChannelValue;
            //ausgabe der Zahl
               myLabel.text = _ChannelValue.toString();
           //sldr welcher den Wert übernehmen soll
              sldrPosition.value = _ChannelValue;
           //     trace(ChannelValue+"++********************************************************lala");
                 dispatchEvent( new Event( "getPosChanged" ) );
                   trace(".......................................setter in View...........channelValue");
              
           }


in der EventMap habe ich flogenden Code

ActionScript:
1
2
3
4
5
<!-- Incjector ChannelValue:Number _____________________________________________________ -->
   <Injectors target="{PlayListView}" debug="true">
      <ObjectBuilder generator="{SldrNumbers}" />
      <PropertyInjector targetKey="ChannelValue" source="{SldrNumbers}" sourceKey="ChannelValue" />
  </Injectors>


im SoundManager folgenden (dies ist die Variante wenn ich die klasse aufrufe um CurrentValue zu berechnen

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//der timer wird gestartet wenn der sound fertig geladen ist und abgespielt wird
      public function runTimerPos(event:TimerEvent):void
      {
         
         
      //   ChannelValue++;
         //ChannelValue = Math.round(Channel.position);
         //trace(ChannelValue);
      
      //   _getPos = 3;
         //_getPos = 0;
      //   _getPos = Channel.position;
      //   trace(_getPos +"++++++++************************************************dsf************************");
          SldrNumbers = new com.model.SldrNumbers();
         SldrNumbers.getChannelValue(_getPos);
      }
      


in der Klasse SldrNumbers wird currentValue berechnet wo flogendes steht:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class SldrNumbers
   {
      import flash.events.TimerEvent;
      import flash.utils.Timer;
      
      public var sdlTimer:Timer;
      
      [Bindable]
      public var ChannelValue:Number;
         
      public var thisgetPos:Number;
      
      public var myNum:Number = 2;
      
       public function SldrNumbers()
      {      
            ChannelValue = 0;
             sdlTimer = new Timer(500);
            sdlTimer.addEventListener(TimerEvent.TIMER, runTimer);
            sdlTimer.start(); 
      }
      
      public function runTimer(event:TimerEvent):void
      {
         
         berechChannelValue();
      
      
      }   
      
      
      public function berechChannelValue():void
      {
      //   ChannelValue++;
         var checkIt:Boolean;
      
         if (isNaN(thisgetPos) == true)
         {
         //   checkIt = false;
            ChannelValue = 90;
         }
         else
         {
            ChannelValue = Math.round(thisgetPos);
            //ChannelValue = 20;
            //trace("ßßßßßßßßßßßßßßßßßßßßßßßßßßß?????????????????????????????????????????????");
         }
      

      }
      
      
      
      
       public function getChannelValue(_getPos:Number):void
      {
            thisgetPos = _getPos;
            
            berechChannelValue();
         
      }

   }


Hier ist es jetz so das anfangs isNaN ture ist solange bis thisgetPos geladen ist dann ist diese flase und er sollte in else gehen und den Wert berechenen wird aber nicht gemacht der CurrentValue in der View ist immer 90

ich habe schon viel ausprobiert....

wenn ich im SoundManger den CurrentValue berechen u die var als Bindable setzte bekomme ich oben genannte Fehlermeldung
im SoundManger starte ich auch einen Timer die aufgerufe Fkt soll CurrentValue aus getPos berechenn (also das gl Prinzip wie in der Extraklasse)

mfg
Die Lösung ist: das Suchen.
LongCrew = 2 people
Geändert von longCrew am 22.11.09 um 14:54 Uhr
badskill#12
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

22.11.2009, 18:08

Das kann so auch nicht funktionieren.
ActionScript:
1<ObjectBuilder generator="{SldrNumbers}" />

Hier erstellst du bereits eine Instanz von SldrNumbers und verknüpfst diese mit der View. Damit hast du dann deine Anzeige von 90.
ActionScript:
1SldrNumbers = new com.model.SldrNumbers();

Hier erstellst du wiederum eine neue Instanz dieser Klasse, die nicht mit der View verknüpft ist. Von daher kannst du in dieser Instanz alles ändern was du willst, es wird nichts aktualisiert.
Verknüpfe die View mit dem Soundmanager.
Zeig mal den Code des Soundmanagers um die Fehlermeldung weg zu bekommen.
longCrew#13
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

22.11.2009, 20:21

achso danke

hier ist der code vom SoundManager:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
   import com.model.SldrNumbers;
   import com.asfusion.mate.events.Dispatcher;
   
   import flash.events.Event;
   import flash.events.TimerEvent;
   import flash.media.ID3Info;
   import flash.media.Sound;
   import flash.media.SoundChannel;
   import flash.media.SoundMixer;
   import flash.net.URLRequest;
   import flash.utils.ByteArray;
   import flash.utils.Timer;


   public class SoundManager extends Dispatcher
   {
      //----------------vars---------------//
      private var SoundObj:Sound;
      private var SoundData:ID3Info;
      private var Channel:SoundChannel = new SoundChannel();
      public var getPos:Number = 0;
      public var SldrNumbers:com.DipA.model.SldrNumbers;
      
      public var soundTimer:Timer;
      
       public var sdlTimer:Timer;
       
       
       public var Spectrum:ByteArray;

      
//   [Bindable]   public var ChannelValue:Number = 0;
         
      
      
   
      //----------------methods----loadingSound----------//   
      public function loadSound(getURL:String):void
      {
         trace(getURL+"----SM--------------loadSound()");
         SoundObj = new Sound();
         SoundObj.load(new URLRequest(getURL));
         SoundObj.addEventListener(Event.COMPLETE, onSoundLoaded);
         
      //   SldrNumbers = new com.DipA.model.SldrNumbers();
      //   SldrNumbers.getChannelValue(_getPos);
         
      }
      
      public var _getPos:Number;
      //double Click
      public function onSoundLoaded(event:Event):void
      {
         Channel.stop();
         Channel = SoundObj.play(getPos,1, null);
   
         //start Timer for sdl value
         /* sdlTimer = new Timer(500);
         sdlTimer.addEventListener(TimerEvent.TIMER, runTimer);
         sdlTimer.start(); */

   
/*          soundTimer = new Timer(500);
         soundTimer.addEventListener(TimerEvent.TIMER, runTimerPos);
         soundTimer.start();  */

         
         //to get my Spectrum
      /*    Spectrum = new ByteArray();
         SoundMixer.computeSpectrum(Spectrum,false,0);
            
            var f:String;
            
             f = Spectrum.readFloat().toString();
             trace(f);
         
         
         trace(f+"´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´soundmixer"); */

         
      }
      
      public function runTimerPos(event:TimerEvent):void
      {
         
         
      //   ChannelValue++;
         //ChannelValue = Math.round(Channel.position);
         //trace(ChannelValue);
      
      //   _getPos = 3;
         //_getPos = 0;
      //   _getPos = Channel.position;
      //   trace(_getPos +"++++++++************************************************dsf************************");
          SldrNumbers = new com.DipA.model.SldrNumbers();
         SldrNumbers.getChannelValue(_getPos);
      } // ...hier kommen dann nur noch die Componentenbefehle des Players
      
Die Lösung ist: das Suchen.
LongCrew = 2 people
Geändert von longCrew am 22.11.09 um 20:21 Uhr
badskill#14
Benutzerbild von badskillFlashhilfe.de Moderator
Beiträge: 5285
Wohnort: Bernau (bei Berlin)
Registriert: Nov 2002

22.11.2009, 21:59

Falsch:
ActionScript:
1public class SoundManager extends Dispatcher

Richtig:
ActionScript:
1public class SoundManager extends EventDispatcher

Import für die EventDispatcher-Klasse nicht vergessen.
longCrew#15
Benutzerbild von longCrew
Beiträge: 380
Wohnort: München, Berlin
Registriert: Apr 2009

Themenautor/in

23.11.2009, 08:06

morgen badskill,

hey vielen dank ohne deine hilfe wär ich nie darauf gekommen, vor allem dass ich eigtl 2 instanzen erstellt habe;)

danke nochmal

es grüßt
die longCrew;)
Die Lösung ist: das Suchen.
LongCrew = 2 people

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de