preload für mehrere scenes

  • Hallo,
    ich teste gerade den Workaround um scenes vorzuladen. Dies funktioniert aber bislang nur immer für eine einzige scene. Ist es möglich mehrere scenes zu laden?
    Anbei mein Versuch - es wird jedoch nur die erste scene vorgeladen.

    Vorab Danke *smile*

    -----------------------

    <action name="preloadpano1">
    preloadimage(pano1_l, JPEG/steinma_pano_l_0101.jpg);
    preloadimage(pano1_f, JPEG/steinma_pano_f_0101.jpg);
    preloadimage(pano1_r, JPEG/steinma_pano_r_0101.jpg);
    preloadimage(pano1_b, JPEG/steinma_pano_b_0101.jpg);
    preloadimage(pano1_u, JPEG/steinma_pano_u_0101.jpg);
    preloadimage(pano1_d, JPEG/steinma_pano_d_0101.jpg);
    </action>

    <action name="preloadpano2">
    preloadimage(pano2_l, JPEG/steinmb_pano_l_0101.jpg);
    preloadimage(pano2_f, JPEG/steinmb_pano_f_0101.jpg);
    preloadimage(pano2_r, JPEG/steinmb_pano_r_0101.jpg);
    preloadimage(pano2_b, JPEG/steinmb_pano_b_0101.jpg);
    preloadimage(pano2_u, JPEG/steinmb_pano_u_0101.jpg);
    preloadimage(pano2_d, JPEG/steinmb_pano_d_0101.jpg);
    </action>

    <events onloadcomplete="preloadpano1();" />
    <events onloadcomplete="preloadpano2();" />

  • Ich hab den Fehler selbst entdeckt. Der Eventtag darf wohl nur einmal aufgerufen werden.

    Falsch:
    <events onloadcomplete="preloadpano1();" />
    <events onloadcomplete="preloadpano2();" />

    Richtig:
    <events onloadcomplete="preloadpano1(); preloadpano2();" />

    Jedoch habe ich noch ein anderes Problem mit der preload-Funktion: Manchmal kommt es zu Fehlern beim preload, die wahrscheinlich nicht vermeidbar sind. Ich glaube, der Fehler tritt auf, wenn man per Hotspot in eine scene wechselt, die gerade vorgeladen wird. Dann wird eine Fehlermeldung in dieser Art im Panorama ausgegeben:

    INFO: krpano 1.0.8.11 (build 2010-05-31)
    (...)
    INFO: starting preloading JPEG/steinwa_pano_l_0101.jpg
    INFO: starting preloading JPEG/steinwa_pano_f_0101.jpg
    INFO: starting preloading JPEG/steinwa_pano_r_0101.jpg
    INFO: starting preloading JPEG/steinwa_pano_b_0101.jpg
    INFO: starting preloading JPEG/steinwa_pano_u_0101.jpg
    INFO: starting preloading JPEG/steinwa_pano_d_0101.jpg
    INFO: preload JPEG/steinwa_pano_u_0101.jpg done
    INFO: preload JPEG/steinwa_pano_l_0101.jpg done
    ERROR: remove - unknown array item - pre_pano6_l

    Da der Fehler nur manchmal auftritt, finde ich ihn nicht sehr störend, da das Bild ja einfach nachgeladen wird. Jedoch würde ich gerne die Fehlermeldung unterdrücken. Ist das machbar?

    Nochmals vorab Danke *smile*

  • Ups - sorry, hatte meinen Beitrag schon beinahe wieder vergessen. Ich habe den eben Quelltext durchsucht. Die ID pre_pano6_l wird überhaupt nicht verwendet....
    Mir scheint, dass die preload-Funktion noch nicht ganz ausgereift ist. Jedenfalls funktioniert sie nicht jedesmal.

  • Hi Klaus,
    danke, dass du nicht locker lässt :-).
    Ich hab den Quelltext nochmal durchsucht. Der String "pano6_l" kommt nur ein einziges mal darin vor:

    preloadimage(pano6_l, JPEG/steinwa_pano_l_0101.jpg);

    Ist es vielleicht irgendwie möglich, die Fehlermeldung zu unterdrücken?

    Gruß, s.

  • Hi,

    danke, dass du nicht locker lässt :-).
    Ich hab den Quelltext nochmal durchsucht. Der String "pano6_l" kommt nur ein einziges mal darin vor:


    wird die Action dann eventuell mehrfach aufgerufen?
    z.B. bei jedesmal wenn die XML geladen wird?
    der Fehler kann eigentlich nur dadurch entstehen das diese ID öfters verwendet wird...
    z.B. in der 1. XML wird das preload mit dieser ID aufgerufen, dann wird die 2. XML geladen
    und dann dort noch einmal derselbe Code, wenn das Laden jetzt noch nicht fertig war,
    dann kommt es zu diesem Problem...


    Ist es vielleicht irgendwie möglich, die Fehlermeldung zu unterdrücken?

    mittels:

    Code
    <krpano ... showerrors="false">


    kann das Öffnen des Logs bei Fehler unterdrückt werden,

    Schöne Grüße,
    Klaus

  • Mmmh. Die Preload-Actions stehen zu Beginn des xml-files. Also nicht in den Scenes. Wenn ich die Scene während des Ladens wechsele, wird die Action also wieder von vorne ausgeführt, weil die xml komplett neu eingelesen wird, richtig?
    Meinst du, dann müsste ich nur alles so umbauen, dass die Actions in den Scenes gestartet werden und alles wäre wieder gut? *smile*

    [edit]
    Nochmal drüber nachgedacht...
    Ein Beispiel: Ich habe drei Scenes a,b und c. Wenn ich a öffne, möchte ich, dass die Bilder von b und c vorgeladen werden. Das mache ich mit zwei actions in der scene, die zB so aussehen:


    Wenn ich nun scene b starte, würde ich diese Action ausführen:

    Code
    <action name="preloadpano3">
    preloadimage(pano3_l, JPEG/c_pano_l_0101.jpg);
    preloadimage(pano3_f, JPEG/c_pano_f_0101.jpg);
    preloadimage(pano3_r, JPEG/c_pano_r_0101.jpg);
    preloadimage(pano3_b, JPEG/c_pano_b_0101.jpg);
    preloadimage(pano3_u, JPEG/c_pano_u_0101.jpg);
    preloadimage(pano3_d, JPEG/c_pano_d_0101.jpg);
    </action>


    D.h. ich würde darauf achten, dass die Bilder c_pano... nicht wieder mit pano2 sondern mit einer anderen id geladen würden, korrekt? Was geschieht, wenn die Bilder aber bereits im cache sind? Werden sie dann trotzdem wieder neu geladen?
    Oder kapier ich es noch immer nicht richtig? *wink*

    Vorab einen virtuellen Kasten Bier ;-),
    s.

    Edited 2 times, last by sileeem (July 23, 2010 at 10:58 AM).

  • Wenn ich die Scene während des Ladens wechsele, wird die Action also wieder von vorne ausgeführt, weil die xml komplett neu eingelesen wird, richtig?

    ... nein, automatisch wird hier nichts ausgeführt, nur wenn die Action auch aufgerufen wird ...
    am Besten einfach ein 'trace' zu der preload Action hinzufügen und im Log (O-Taste) nachsehen,

    z.B.

    Code
    <action name="preloadpano1">
      trace(preloadpano1);
      ...
  • nein, automatisch wird hier nichts ausgeführt, nur wenn die Action auch aufgerufen wird

    Ich rufe die Actions bislang durch ein event auf, das vor den Scenes steht.

    Code
    <events onloadcomplete="preloadpano2(); preloadpano3(); preloadpano4(); preloadpano6(); preloadpano5(); preloadpano7();" />

    Das bedeutet dann doch, dass beim Starten jeder Scene die gleichen Actions aufgerufen werden, richtig? Ist es möglich, events auch in einer Scene aufzurufen?
    Die trace-Funktion teste ich später. Der Fehler tritt leider nicht jedesmal auf und ist nicht reproduzierbar.

    Thanx, s.

  • okay, das "onloadcomplete" Event wird jedesmal aufgerufen wenn ein Pano fertig geladen ist,
    das bleibt auch gesetzt, solange es nicht 'überschrieben' oder auf etwas anders gesetzt wird,

    damit das nicht jedesmal neu aufgerufen wird, kann es z.B. so wieder zurückgesetzt werden:

    Code
    <events onloadcomplete="... preloadpano7(); set(events.onloadcomplete,null);" />
  • OK. Und wie sieht es mit meinem Lösungsansatz von oben aus (editiertes Posting von 10:24)? Könnte das auch klappen?
    Die Frage stellt sich, weil ich dann den preload für meine Touren besser skalieren könnte.

    Nochmals vielen Dank für deine Mühe. Ist ja beinahe ein Chat *smile*

  • du könntest in jeder <scene> ein "onloadcomplete" Event einfügen, wo nur jeweiligen anderen Scenen geladen werden,

    kannst du bitte noch den Code der "preloadimage" Action posten?
    es gäbe die Möglichkeit dort eine Zufällige ID zu verwenden, dann kanns doppelte Verwenden einer ID auch nicht vorkommen,

  • Die Idee mit dem event in jeder Scene ist tatsächlich nur dann brauchbar, wenn dabei jedesmal unterschiedliche id's verwendet würden. Ich spüre, wir nähern uns der perfekten Lösung *smile*
    So sieht der Code bislang aus:

  • Hi,

    z.B.

    hier wird bei jedem Aufruf der preloadimage Action eine Variable (preloadimagecount) um 1 erhöht und damit ein eindeutiger Name für das Preload Element erzeugt, damit kann es keine doppelt verwendeten Name mehr geben,

    Schöne Grüße,
    Klaus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!