Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: krpano.com Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Dienstag, 24. Januar 2012, 13:00

eigenes Hotspot Plugin - Fehler bei event

Hallo

ich habe ein kleine Plugin geschrieben, was beim Start eine XML Datei lädt und aus dieser dann Hotspot-Koordinaten ausliest und diese erstellt. Das funktioniert beim ersten Laden auch einwandfrei, aber ich will natürlich auch beim Panoramawechsel neue Hotspots laden und habe mir gedacht ich nutze das onnewpano Event dazu. Der Aufbau sieht wie folgt aus:

hotspot plugin:

Quellcode

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
public function registerplugin(krpanointerface:Object, pluginfullpath:String, pluginobject:Object):void {
        // get the krpano interface and the plugin object
        krpano = krpanointerface;
        plugin = pluginobject;

_panoID = krpano.get("_panoID");
plugin.renew= renew;

loadXML(krpano.parsePath(plugin.file),"file");

}

// xml laden per loadXML und dann wird generatePoints aufgerufen

private function generatePoints():void {

var _len:int = _data[_panoID].highlights.length;

krpano.trace(1, 'panoID:' + _panoID + ' hotspot.count = ' + krpano.get("hotspot.count"));
for (var _i:int = 0; _i < _len; ++_i) {
krpano.trace(1, _i + " " + _len);
krpano.call("addhotspot(name" + _i + ");");

var hotspot:Object = krpano.get("hotspot[name" + _i + "]");

hotspot.url = "%SWFPATH%/content/media/hotspot.png";
hotspot.align = "center";

hotspot.ath = _data[_panoID].highlights[_i].x;
hotspot.atv= _data[_panoID].highlights[_i].y;
krpano.trace(1, krpano.get("hotspot.count"));
}
   }

private function renew() {
  // Punkte updaten
  _panoID = krpano.get("_panoID");
  generatePoints();
}


Nachdem die XML geladen wurde und generatePoints aufgerufen wird werden auch schön alle Bilder erstellt. Sobald ich aber das event nutze um plugin[hotspot].renew() aufzurufen kommt die Meldung
Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at Hotspot/generatePoints()

oder wenn ich den krpano Editor benutze:
Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at editor/set_hotspot_editable()

Der Fehler tritt bei var hotspot:Object = krpano.get("hotspot[name" + _i + "]"); auf, da er das addhotspot anscheinend nicht mehr ausführt. Gibt es dafür einen Grund? hotspot.count ist immer 0 (vorher und nachher [wenn ich nur addhotspots durchlaufen lasse und alles weitere auskommentiere]).
Ich habe auch schon das Event auf oncomplete geändert, aber es kommt der gleiche Fehler.

Hoffe es kann jemand helfen

Danke

2

Mittwoch, 25. Januar 2012, 18:48

Hi,

ist bei deinem Plugin - keep="true" - gesetzt?
ohne diese Einstellung wird das Plugin beim Laden eines neues Panos (XML oder Scene) wieder entfernt,

ein weniger Problem kann sein, das die "addhotspot()" Aufrufe noch nicht abgearbeitet worden sind,
je nachdem was für Aufrufe es noch in der XML gab, kann es sein, das sich diese Aufrufe erst später aufgerufen werden,

falls nur Flash verwendet wird, gäbe es einen Trick um diese Verzögerung zu umgehen,
per:

Quellcode

1
var krpano_addhotspot:Function = krpano.get("addhotspot");

kann die Funktion direkt geholt werden, und dann per:

Quellcode

1
krpano_addhotspot("....");

direkt aufgerufen werden,
so werden eventuelle Verzögerungen durch die normale XML Actions-Abarbeite-Warteschlange vermieden,

Schöne Grüße,
Klaus

3

Donnerstag, 26. Januar 2012, 09:33

Hallo Klaus,
keep ist auf true.

Der Flash Trick mit der krpano_addhotspot Funktion hat funktioniert *thumbup* !

Vielen Dank!