You are not logged in.

Dear visitor, welcome to krpano.com Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Tuesday, January 24th 2012, 1:00pm

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:

Source code

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

Wednesday, January 25th 2012, 6:48pm

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:

Source code

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

kann die Funktion direkt geholt werden, und dann per:

Source code

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

Thursday, January 26th 2012, 9:33am

Hallo Klaus,
keep ist auf true.

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

Vielen Dank!