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

Samstag, 3. März 2012, 21:29

AS3 plugin interface umbau?

Ich stehe etwas an; vielleicht kann jemand helfen(?):

Beim Upgraden mancher meiner touren, die eigene swf-plugins enthalten, ist es nötig, die mittlerweile neue swf 1.0.8.14 sowie deren interface.as und die neue Einbindung in as3-code zu verwenden, wie es klaus schreibt.
Sieht bei mir zB so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function registerplugin(krpanointerface:Object, pluginfullpath:String, pluginobject:Object):void
{
	// get the krpano interface and the plugin object
	kr = krpanointerface;
	plugin = pluginobject;

	// add plugin attributes and functions
	/* some example attributes:
	plugin.registerattribute("attr1", "defaultvalue");
	
	add a from xml callable functions:
	plugin.testfunction1 = testfunction1;*/

	kr.set("pas_makeLinkTo", placeLink);
	kr.set("ScrGet.texte", getScTexte);
	kr.set("ScrSet.newscene", newSc);
	kr.set("Scr.showtitle", putTitle);
	kr.set("Scr.HideHot", hideHotspots);
	kr.set("Scr.ShowHot", showHotspots);

	// say hello
	kr.trace(0,"hello from plugin[" + plugin.name + "]");
}

.. jetzt habe ich hier nur die möglichkeit, (xml-aufrufbare) funktionen zu definieren, aber nicht, wie bisher - nach geladenem plugin - direkt code ausführen zu lassen, mit dem diese funktionen ggf. interagieren;
so wie bisher einfach mit code fortzusetzen:

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
40
41
42
43
44
45
var sceneCount:int = kr.get("scene.count");

var scTexte = new Array  ;
var scTitel = new Array  ;
	scTitel[1] = "leer";
	scTexte[1] = "Ich bin von scene 1 abgerufen";


function getScTexte():void
{
	var i:int = 1;
	var ausdruck:String = "";
	var tmp:String = "";
	var teile = new Array  ;

	for (i=1; i<=sceneCount; i++)
	{
		var pano:String = kr.get("sc" + makeLeadingCero(3,i));
		ausdruck = "data[pano" + pano + "].content";
		tmp = kr.get(ausdruck);
		teile = tmp.split("#",2);
		scTitel[i] = teile[0];
		scTexte[i] = teile[1];
	}
}

function newSc(Nr: int)
{
	scroller.kopf.htmlText = scTitel[Nr];// Titel & Text einsetzen
	scroller.scrollText.htmlText = scTexte[Nr];

	scroller.scrbar.validateNow();
	scroller.scrbar.scrollPosition = 1;

	if (scTitel[Nr] == "leer")
	{// Leertextverhalten definieren (im scenentext mus "leer" stehen!)
		scroller.scrollText.htmlText = scroller.kopf.htmlText = "";
		scroller.alpha = 0.2;
	}
	else
	{
		scroller.alpha = initA;
	}

}

... ist nicht möglich, da zB die arrays scTexte und scTitel sich nicht mehr im jew. benötigten Gültigkeitsbereich befinden. In der bisherigen Methode, war ich nicht gezwungen, die benötigten funktionen (die mit kr.set("...",...)) innerhalb der registerplugin-funktion zu definieren.
Gibt es einen Weg, dies zu umgehen?

PS: Es geht in dem Beispiel um eine in Flah erstellte Textbox "Scroller" mit Titelleiste und Textscrollbereich, für die beim Laden des Plugins ein 2dim Array alle Texte erhält und das Plugin selbst tauscht (xml-Befehl "newSC" bei jedem szenenwechsel) auf Befehl diese Texte für die neue szene aus...

EDIT:
Bin schon draufgekommen, dass meine bisherige Version der Einbindung - mit

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
import krpano_as3_interface;

// create krpano as3 interface object - krpano
var kr:krpano_as3_interface = krpano_as3_interface.getInstance();


// empty functions? - then it wasn't included in the viewer
if (kr.get == null)
{
	// run plugin swf standalone - no interfaces - add dummy functions

	function dummy_get(v:String):String
	{// avoid progress timer traces
		if (v != "progress.loaddone")
		{
			trace("get(" + v + ");");
		}
		return "";
	}
	function dummy_set(v:String,val:String):void
	{
		trace("set("+v+","+val+");");
	}

	function dummy_call(action:String):void
	{
		trace("call("+action+");");
	}

	kr.get = dummy_get;
	kr.set = dummy_set;
	kr.call = dummy_call;
}
... code
...code
...code


weiterhin auch mit der neuen interface.as funktioniert und damit das Problem der Variablengültigkeit ausserhalb v. funktionen gar nicht besteht...
Manchmal ist der einfache Weg, etwas zum Laufen zu bringen, der, der einem zuletzt einfällt...
best regards from www.PanAustria.com

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »PanAustria« (4. März 2012, 15:34)


2

Mittwoch, 7. März 2012, 12:14

Hi,

ich verstehe leider das genaue Problem nicht ganz...
ist die Frage bzgl. AS3 oder dem Interface selbst?

grundsätzlich lässt sich aber mit dem neuen Interface auch alles (und noch mehr) machen, was mit dem alten auch möglich war...
im Prinzip hat sich nur der Startpunkt (registerplugin anstelle dem Register Event) und die Art wie das krpano Interface Objekt übergeben wird, geändert...

Schöne Grüße,
Klaus

3

Freitag, 9. März 2012, 09:04

Bin mir nicht sicher, wo der "Hund begraben liegt", aber der code:

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
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import flash.display.Sprite;
import flash.display.DisplayObject;
import flash.ui.Mouse;
import flash.events.*;
import flash.geom.*;
import fl.motion.Color;
/*
krpano as3 plugin example / template
for Flash CS (.fla)
*/

var kr:Object = null;
var plugin:Object = null;

if (stage == null)
{
	this.addEventListener(Event.ADDED_TO_STAGE, versioncheck);
}
else
{
	stage.scaleMode = "noScale";
	stage.align = "TL";

	var txt:TextField = new TextField();
	txt.defaultTextFormat = new TextFormat("_sans",14,0xFFFFFF,false,false,false,null,null,"center");
	txt.autoSize = "center";
	txt.htmlText = "krpano\n\nplugintemplate plugin";
	addChild(txt);

	var resizefu:Function = function(event:Event=null):void
	{
	txt.x = (stage.stageWidth  - txt.width )/2;
	txt.y = (stage.stageHeight - txt.height)/2;
	};

	stage.addEventListener(Event.RESIZE, resizefu);

	resizefu();
}

function versioncheck(evt:Event):void
{
	this.removeEventListener(Event.ADDED_TO_STAGE, versioncheck);
	var oldkrpanointerface:Object = (getDefinitionByName("krpano_as3_interface") as Class)["getInstance"]();
	if (oldkrpanointerface.get("version") < "1.0.8.14" || oldkrpanointerface.get("build") < "2011-05-10")
	{
		oldkrpanointerface.trace(3, "plugintemplate plugin - too old krpano viewer version (min. 1.0.8.14)");
	}
}

// registerplugin;
function registerplugin(krpanointerface:Object, pluginfullpath:String, pluginobject:Object):void
{
	kr = krpanointerface;
	plugin = pluginobject;

	// add plugin attributes and functions
	// plugin.registerattribute("attr1", "defaultvalue");
	
	kr.set("getTxt",getScTexte);

}

// unloadplugin
function unloadplugin():void
{
	// remove all your custom plugin stuff here
	// ...

	plugin = null;
	kr = null;
}
 //****************
 
var actualScene:int = 0;
var scNumberStr:String = "";
var hotCount:int = 0;
var plugCount:int = 0;

var sceneCount:int = kr.get("scene.count");

var scTexte = new Array  ;
var scTitel = new Array  ;
	scTitel[1] = "leer";
	scTexte[1] = "Ich bin von scene 1 abgerufen";


function getScTexte():void
{
	var i:int = 1;
	var ausdruck:String = "";
	var tmp:String = "";
	var teile = new Array  ;

	for (i=1; i<=sceneCount; i++)
	{
		var pano:String = kr.get("sc" + makeLeadingCero(3,i));
		ausdruck = "data[pano" + pano + "].content";
		tmp = kr.get(ausdruck);
		teile = tmp.split("#",2);
		scTitel[i] = teile[0];
		scTexte[i] = teile[1];
	}
}
function makeLeadingCero(stellen:int, i:int):String
{
	var textnr:String = String(i);
	while (textnr.length< stellen)
	{
		textnr = "0" + textnr;
	}
	return textnr;
}

function krtrace(xy:Object)
{
	kr.call("trace(" + xy + ")");
}

führt bei mir in Flash immer zur Ausgabemeldung:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
at paScroller01dev_fla::MainTimeline/frame1()
best regards from www.PanAustria.com

4

Dienstag, 13. März 2012, 13:34

Hi,

der Zugriff auf das "kr" Objekt hier erfolgt zu früh:

Quellcode

1
var sceneCount:int = kr.get("scene.count");


das "kr" Objekt ist aber erst nach dem "registerplugin" Aufruf verfügbar (das war aber in den vorherigen Versionen genauso),

Schöne Grüße,
Klaus

Ähnliche Themen