You are not logged in.

1

Tuesday, February 16th 2010, 11:30am

srolling thumbail

I am writing a plugin for scrolling thumbail in krpano who was running with krpano 1.06 but not with krpano 1.08!

Please help me to find error for what it don't run with new version!

structure is like:
Plugins folder (contain: carousel.swf)
Tour folder (contain tour.swf, tour.xml, carousel.xml)
Thumbail folder (contain thumbails for carousel)

the plugin is call by:
<plugin name="carousel" url="../plugins/carousel.swf" zorder="5" origin="leftbottom" xml="carousel.xml" y="0" height="125" handcursor="true"/>



The plugin refer to an carousel.xml file for finding thumbails and is like that:

<carousel>
<salon="../vignettes/salon.png" over="../vignettes/salon.png" label="au salon"/>
<cuisine="../vignettes/cuisine.png" over="../vignettes/cuisine.png" label="cuisine"/>
<chambre="../vignettes/chambre.png" over="../vignettes/chambre.png" label="chambre"/>
<jardin="../vignettes/jardin.png" over="../vignettes/jardin.png" label="jardin"/>
<terrasse="../vignettes/terrasse.png" over="../vignettes/terrasse.png" label="terrasse"/>
<garage="../vignettes/garage.png" over="../vignettes/garage.png" label="garage"/>
</carousel>


My as3 script is:

//ActionScript 3.0
// class Carousel
package
{
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.net.*;
import flash.text.*;

public class Carousel extends flash.display.MovieClip
{
public function Carousel()
{
_dataProvider = [];
_currentIndex = 0;
_currentThumbIndex = -1;
xPos = 0;
_thumbs = [];
super();
trace(this + "::Carousel");
return;
}

public function init():void
{
trace(this + "::init");
background = doDrawRect(100, 125, 0);
background.alpha = 0.1;
addChild(background);
yugop = new MovieClip();
addChild(yugop);
masque = doDrawRect(100, 125, 13369344);
addChild(masque);
masque.alpha = 0;
yugop.mask = masque;
addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
buttonMode = false;
return;
}

private function _onThumbOver(arg1:flash.events.MouseEvent):void
{
var loc1:*=null;
var loc2:*=null;
trace("_onThumbOver: " + arg1.currentTarget.index);
if (_currentThumbIndex != arg1.currentTarget.index)
{
loc1 = getBitmapFilter(6710886);
loc2 = new Array();
loc2.push(loc1);
arg1.currentTarget.filters = loc2;
}
return;
}

public function doDrawRect(arg1:Number, arg2:Number,

arg3:Number):flash.display.MovieClip
{
var loc1:*=null;
trace(this + ":: doDrawRect " + arg1 + " " + arg2);
(loc1 = new MovieClip()).graphics.beginFill(arg3);
loc1.graphics.drawRect(0, 0, arg1, arg2);
loc1.graphics.endFill();
return loc1;
}

private function _onThumbOut(arg1:flash.events.MouseEvent):void
{
var loc1:*=null;
var loc2:*=null;
trace("_onThumbOut: " + arg1.currentTarget.index);
if (_currentThumbIndex != arg1.currentTarget.index)
{
loc1 = getBitmapFilter(0);
loc2 = new Array();
loc2.push(loc1);
arg1.currentTarget.filters = loc2;
}
return;
}

public function start():void
{
var loc1:*=null;
trace(this + "::start ");
_currentIndex = 0;
loc1 = new URLRequest(_dataProvider[_currentIndex].over);
_ldr = new Loader();
_ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
_ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_ldr.load(loc1);
return;
}

public function initPosition(arg1:Number, arg2:Number):void
{
trace(this + "::initPosition");
this.stageWidth = arg1;
this.stageHeight = arg2;
background.width = arg1;
masque.width = arg1;
if (yugop.width < arg1)
{
xPos = arg1 / 2 - yugop.width / 2;
yugop.x = xPos;
}
else
{
xPos = 0;
yugop.x = 0;
}
return;
}

private function ioErrorHandler(arg1:flash.events.IOErrorEvent):void
{
trace("ioErrorHandler: " + arg1.text);
Main.krpano.call("error(erreur chargement :" + _dataProvider[_currentIndex].id +

");");
return;
}

private function _onThumbClick(arg1:flash.events.MouseEvent):void
{
var loc1:*=null;
var loc2:*=null;
trace("_onThumbClick: " + arg1.currentTarget.index);
loc2 = new Array();
if (_currentThumbIndex != arg1.currentTarget.index)
{
if (_currentThumbIndex != -1)
{
loc1 = getBitmapFilter(0);
loc2 = [];
loc2.push(loc1);
_thumbs[_currentThumbIndex].filters = loc2;
_thumbs[_currentThumbIndex].buttonMode = true;
}
Main.krpano.call("action(load" + arg1.currentTarget.index + ")");
loc1 = getBitmapFilter(6710886);
loc2 = [];
loc2.push(loc1);
arg1.currentTarget.filters = loc2;
_currentThumbIndex = arg1.currentTarget.index;
_thumbs[_currentThumbIndex].buttonMode = false;
}
return;
}

public function mouseOutHandler(arg1:flash.events.Event):void
{
isOver = false;
removeEventListener(Event.ENTER_FRAME, __onEnterFrame);
return;
}

public function __onEnterFrame(arg1:flash.events.Event):void
{
var loc1:*=NaN;
var loc2:*=NaN;
var loc3:*=NaN;
var loc4:*=NaN;
var loc5:*=NaN;
loc1 = yugop.width;
loc2 = background.width;
loc3 = mouseX;
if (loc1 > loc2)
{
loc4 = loc1 / loc2;
loc5 = loc3 / 2 / (loc2 / 2);
xPos = -(loc1 - loc2) * loc5;
yugop.x = yugop.x + Math.floor((xPos - yugop.x) / loc4);
}
return;
}

public function set dataProvider(arg1:Array):void
{
var loc1:*=0;
var loc2:*=null;
var loc3:*=0;
trace(this + "::set dataProvider");
loc2 = [];
_dataProvider = arg1;
loc1 = _dataProvider.length;
loc3 = 0;
while (loc3 < loc1)
{
_dataProvider[loc3].clip = yugop.addChild(new MovieClip());
loc3 = (loc3 + 1);
}
return;
}

private function completeHandler(arg1:flash.events.Event):void
{
var loc1:*=null;
var loc2:*=null;
var loc3:*=null;
var loc4:*=null;
var loc5:*=null;
var loc6:*=null;
trace(this + "::completeHandler");
loc2 = _dataProvider[_currentIndex].clip as MovieClip;
loc4 = new TextFormat();
loc5 = getBitmapFilter(0);
(loc6 = new Array()).push(loc5);
loc4.font = "Arial";
loc4.size = 14;
loc4.color = 10066329;
loc4.bold = true;
loc2.addChild(_ldr);
loc2.x = _currentIndex * (loc2.width + 10);
loc2.index = _currentIndex;
loc2.buttonMode = true;
loc2.addEventListener(MouseEvent.CLICK, _onThumbClick);
loc2.addEventListener(MouseEvent.MOUSE_OVER, _onThumbOver);
loc2.addEventListener(MouseEvent.MOUSE_OUT, _onThumbOut);
(loc3 = new TextField()).autoSize = TextFieldAutoSize.LEFT;
loc3.text = _dataProvider[_currentIndex].label;
loc3.setTextFormat(loc4);
loc2.addChild(loc3);
loc3.y = 125 - loc3.height;
loc3.x = _ldr.width / 2 - loc3.width / 2;
loc3.background = false;
loc3.blendMode = BlendMode.HARDLIGHT;
loc2.filters = loc6;
_thumbs.push(loc2);
if (_currentIndex + 1 < _dataProvider.length)
{
var loc7:*;
var loc8:*=(_currentIndex + 1);
_currentIndex = loc8;
loc1 = new URLRequest(_dataProvider[_currentIndex].over);
_ldr = new Loader();
_ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
_ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,

ioErrorHandler);
_ldr.load(loc1);
}
else
{
trace("ALLcomplete");
}
if (yugop.width < stageWidth)
{
xPos = stageWidth / 2 - yugop.width / 2;
yugop.x = xPos;
}
else
{
xPos = 0;
yugop.x = 0;
}
return;
}

2

Tuesday, February 16th 2010, 11:30am

and the suite (because message is too longer!):


public function mouseOverHandler(arg1:flash.events.Event):void
{
isOver = true;
addEventListener(Event.ENTER_FRAME, __onEnterFrame);
return;
}

private function getBitmapFilter(arg1:Number):flash.filters.BitmapFilter
{
var loc1:*=NaN;
var loc2:*=NaN;
var loc3:*=NaN;
var loc4:*=NaN;
var loc5:*=NaN;
var loc6:*=NaN;
var loc7:*=false;
var loc8:*=false;
var loc9:*=NaN;
arg1 = isNaN(arg1) ? 0 : arg1;
loc1 = 90;
loc2 = 0.8;
loc3 = 8;
loc4 = 8;
loc5 = 5;
loc6 = 0.65;
loc7 = false;
loc8 = false;
loc9 = BitmapFilterQuality.HIGH;
return new DropShadowFilter(loc5, loc1, arg1, loc2, loc3, loc4, loc6, loc9, loc7,

loc8);
}


{
className = "Carousel";
classPackage = "";

}

public const ROLL:Boolean=true;

public var yugop:flash.display.MovieClip;

public var masque:flash.display.MovieClip;

public var isOver:Boolean;

public var background:flash.display.MovieClip;

public var _ldr:flash.display.Loader;

public var _currentThumbIndex:int=-1;

public var stageWidth:Number;

public var _thumbs:Array;

private var _dataProvider:Array;

public var xPos:Number=0;

public var stageHeight:Number;

public var _currentIndex:uint=0;

public static var className:String="Carousel";


public static var classPackage:String="";

public static var version:String="1";
}
}


// class Main
package
{
import flash.display.*;
import flash.events.*;
import flash.net.*;

public class Main extends flash.display.MovieClip
{
public function Main()
{
pluginname = "plugin[carousel]";
super();
trace(this + "::Main");
krpano = krpano_as3_interface.getInstance();
init();
return;
}

public function init():void
{
var dummy_call:Function;
var dummy_get:Function;
var dummy_set:Function;

var loc1:*;
dummy_get = null;
dummy_set = null;
dummy_call = null;
trace(this + "::init");
if (krpano.get == null)
{
dummy_get = function (arg1:String):String
{
if (arg1 != "progress.loaddone")
{
trace("get(" + arg1 + ");");
}
return "";
}
dummy_set = function (arg1:String, arg2:String):void
{
trace("set(" + arg1 + "," + arg2 + ");");
return;
}
dummy_call = function (arg1:String):void
{
trace("call(" + arg1 + ");");
return;
}
krpano.get = dummy_get;
krpano.set = dummy_set;
krpano.call = dummy_call;
}
if (stage)
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
_onLocalStartUpPlugin(null);
}
else
{
this.addEventListener(Event.ADDED_TO_STAGE, _onStartUpPlugin);
}
return;
}

private function _loadXML():void
{
var loader:flash.net.URLLoader;
var request:flash.net.URLRequest;

var loc1:*;
request = null;
loader = null;
XML.ignoreWhitespace = true;
request = new URLRequest(xml);
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, _onLoadXMLComplete);
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
krpano.call("error(An ArgumentError has occurred." + undefined + ");");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
krpano.call("error(A SecurityError has occurred." + undefined + ");");
}
return;
}

private function _onStageResize(arg1:flash.events.Event):void
{
var loc1:*=NaN;
var loc2:*=NaN;
trace(this + "::_onStageResize");
loc1 = stage.stageWidth;
loc2 = stage.stageHeight;
carousel.initPosition(stage.stageWidth, stage.stageHeight);
return;
}

private function _onLoadXMLComplete(arg1:flash.events.Event):void
{
var loc1:*=0;
var loc2:*=0;
var loc3:*=null;
var loc4:*=null;
loc3 = [];
XML.ignoreWhitespace = true;
list = XML(arg1.target.data);
carousel = new Carousel();
addChild(carousel);
carousel.init();
_onStageResize(null);
loc1 = list.children().length();
loc2 = 0;
while (loc2 < loc1)
{
loc4 = list.children()[loc2];
loc3.push({"id":loc4.name().localName, "over":loc4.attribute("over"),

"out":loc4.attribute("out"), "label":loc4.attribute("label")});
loc2 = (loc2 + 1);
}
carousel.dataProvider = loc3;
carousel.start();
return;
}

private function _onStartUpPlugin(arg1:flash.events.Event):void
{
krpano.addPluginEventListener(this, krpano_as3_interface.PLUGINEVENT_REGISTER,

_onRegisterEvent);
stage.addEventListener(Event.RESIZE, _onStageResize);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, stage_fullscreen_event);
get_current_values();
return;
}

private function stage_fullscreen_event(arg1:flash.events.FullScreenEvent):void
{
if (arg1.fullScreen != true)
{
};
return;
}

private function get_current_values():void
{
return;
}

private function _onLocalStartUpPlugin(arg1:flash.events.Event):void
{
trace(this + "::_onLocalStartUpPlugin");
stage.addEventListener(Event.RESIZE, _onStageResize);
stage.addEventListener(FullScreenEvent.FULL_SCREEN, stage_fullscreen_event);
get_current_values();
xml = "../tour/carousel.xml";
_loadXML();
return;
}

private function _onRegisterEvent(arg1:flash.events.DataEvent):void
{
var loc1:*=undefined;
pluginname = "plugin[" + arg1.data + "]";
loc1 = krpano.get(pluginname + ".xml");
if (!(loc1 == undefined) && !(loc1 == ""))
{
xml = loc1;
_loadXML();
}
return;
}


{
className = "Main";
classPackage = "";

krpano = null;
}

public var xml:String;

public var pluginname:String="plugin[carousel]";

public var carousel:Carousel;

public static var className:String="Main";

public static var classPackage:String="";

public static var version:String="1";

public static var krpano:krpano_as3_interface=null;

static var list:XML;
}
}


// class krpano_as3_interface
package
{
public class krpano_as3_interface extends Object
{
public function krpano_as3_interface()
{
set = null;
get = null;
call = null;
trace = null;
addPluginEventListener = null;
removePluginEventListener = null;
super();
return;
}

public static function getInstance():krpano_as3_interface
{
if (instance == null)
{
instance = new krpano_as3_interface();
}
return instance;
}


{
instance = null;
}

public static const PLUGINEVENT_REGISTER:String="krpano.registerplugin";

public static const PLUGINEVENT_RESIZE:String="krpano.resizeplugin";

public var set:Function=null;

public var trace:Function=null;

public var get:Function=null;

public var removePluginEventListener:Function=null;

public var addPluginEventListener:Function=null;

public var call:Function=null;

public static var instance:krpano_as3_interface=null;
}
}


I don't know where is the probleme, so if someone knows the solution, help me please!

Thanks, very thanks!

Tuur

Sage

Posts: 3,839

Location: Netherlands

Occupation: Krpano custom coding / Virtual Tours / Photography / Musician / Recording engineer

  • Send private message

3

Tuesday, February 16th 2010, 1:38pm

Did you put :

Source code

1
2
3
4
import krpano_as3_interface;


var krpano:krpano_as3_interface = krpano_as3_interface.getInstance();


this at the top of the as3 code...

and put krpano_as3_interface.as file in the same folder...

??


cheers

Tuur *thumbsup*

4

Tuesday, February 16th 2010, 1:53pm

I don't need to put krpano_as3_interface.as with the krpano 1.06 version, and it's run

5

Tuesday, February 16th 2010, 11:48pm

No one has an ideas?

6

Monday, February 22nd 2010, 3:52pm

Hi,

this part in the register event is the problem:

Source code

1
2
3
4
5
private function _onRegisterEvent(arg1:flash.events.DataEvent):void
{
...
pluginname = "plugin[" + arg1.data + "]";
..


since version 1.0.7, the full path/name of the krpano object will be returned in the "data" event member,

e.g.
"plugin[name]" or hotspot[name]" instead of just "name"

just change the code to:

Source code

1
pluginname = arg1.data;


best regards,
Klaus