PDA

View Full Version : Help on a class...



fusionPT
December 1st, 2009, 02:23 PM
Why this throws me this error?:



ReferenceError: Error #1069: Property button1 not found on com.cacao.tooltip and there is no default value.
at com.cacao::tooltip/com.cacao::Parse()
at com.cacao::tooltip/com.cacao::xmlLoaded()
at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunctio n()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()


This is the code:



package com.cacao{

import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.*;
import flash.events.*;
import flash.display.*;
import caurina.transitions.Tweener;
import flash.filters.*;
import caurina.transitions.properties.FilterShortcuts;


public class tooltip extends MovieClip {



var myXML:XML = new XML();
var xmlPath:String ="xml/tooltip.xml";
var XML_URL:String = xmlPath;
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
var outX:Number;
var btnOver;
var Xmouse:Number;
var Ymouse:Number;
var buttonAll:XMLList;
var buttonAttr:XMLList;
var buttonText:XMLList;
var buttonActual;
var textos:XMLList;
var toolNumber:Number;
var tooltipColor:uint = 0xCCCFFF;
//TOOLTIP TEXT VARS
var fontSize:Number = 14;
var toolTipWidth:Number = 200;
var myFont1:Font = new Font1();
var myFont1B:Font = new Font1B();
var format1:TextFormat = new TextFormat();
var ttText:TextField = new TextField();
//TOOTIP BG VARS
var contenedor:MovieClip = new MovieClip();
var bg:Sprite = new Sprite();
var triangle:Sprite = new Sprite;
//etc.....

function tooltip():void {

FilterShortcuts.init();
bg.graphics.drawRect(0, 0, 50, 50);
bg.graphics.beginFill(tooltipColor);
bg.graphics.drawRect(0, 0, 50, 50);
bg.graphics.endFill();
//
bg.width = ttText.width;
format1.font = myFont1.fontName;
format1.size = fontSize;
format1.color = 0x333333;
ttText.wordWrap = true;
ttText.border = false;
ttText.multiline = true;
ttText.autoSize = TextFieldAutoSize.LEFT;
ttText.defaultTextFormat = format1;
ttText.embedFonts = true;
ttText.antiAliasType = AntiAliasType.ADVANCED;
ttText.text = "Loading";
addChild(contenedor);
contenedor.addChild(bg);
contenedor.addChild(ttText);
contenedor.addChild(triangle);
contenedor.alpha=0;

bg.alpha = 1;
triangle.alpha=1;

makeTriangle(10,10);

//LOAD XML FILE
myLoader.addEventListener("complete", xmlLoaded);

}



function makeTriangle(triangleSideW,triangleSideH) {

triangle.graphics.beginFill(tooltipColor);
var triangleSide:Number = 10;
triangle.graphics.moveTo(0, 0);
triangle.graphics.lineTo(0, triangleSide);
triangle.graphics.lineTo(triangleSideW, triangleSideH);
triangle.graphics.lineTo(0, 0);
triangle.rotation = -45;
}
function xmlLoaded(event:Event):void {
myXML = XML(myLoader.data);
Parse(myXML.button);
myXML.ignoreWhite = true;
}

function Parse(buttonInput):void {
buttonAll = buttonInput.children();
buttonAttr = buttonInput.attribute("id");
buttonText = buttonInput.texto;
//trace(buttonAll + "Length: "+buttonInput.length());
trace(buttonAttr)
for (var item:uint = 0; item < buttonInput.length(); item++) {
this[buttonAttr[item]].addEventListener(MouseEvent.MOUSE_OVER, loadTexts);
this[buttonAttr[item]].addEventListener(MouseEvent.MOUSE_OUT, removeToolTip);
}
}
function loadTexts(evt:MouseEvent) {
buttonActual = evt.currentTarget.name;
btnOver = evt.currentTarget;
splitArray(buttonActual);
contenedor.visible = false;
ttText.wordWrap = true;
ttText.htmlText = buttonText[toolNumber];
ttText.addEventListener(Event.ENTER_FRAME, toolTip);
trace("button"+buttonActual+" -- "+buttonText[toolNumber]);
Tweener.addTween(contenedor,{alpha:1,time:1, delay:.1,transition:"easeInOut"});
contenedor.mouseChildren = false;
}

function removeToolTip(evt:MouseEvent):void {
Tweener.addTween(contenedor,{alpha:0,time:.5, transition:"easeInOut", onComplete:hideToolTip});
ttText.removeEventListener(Event.ENTER_FRAME, toolTip);

}
function hideToolTip() {
contenedor.visible = false;
}
function toolTip(evt:Event):void {
Xmouse = Math.round(mouseX - ttText.width / 2 - triangle.width/2);
Ymouse = btnOver.y - ttText.height - 40;
contenedor.visible = true;
placeTool();
contenedor.x += .5 * (Xmouse - contenedor.x);
}

function splitArray(clicked) {
toolNumber = Number(clicked.split("button").join("")-1);
trace(toolNumber);
}
function placeTool() {
ttText.width = toolTipWidth;
ttText.x=10;
ttText.y=10;
ttText.wordWrap = true;
ttText.multiline = true;
bg.width=ttText.width + 20;
bg.height=ttText.height + 20;
if (ttText.textWidth < toolTipWidth-30) {
trace("menor");
ttText.wordWrap = false;
bg.width=ttText.width + 20;
bg.height=ttText.height + 20;
}
if (mouseY<200) {
contenedor.y = Math.floor(mouseY+30);
triangle.x = bg.width /2 + triangle.width/2;
triangle.y = bg.y;
triangle.rotation=135;
}
if (mouseY>200) {
contenedor.y = Math.floor(mouseY-contenedor.height - 20);
ttText.x=10;
ttText.y=10;
triangle.x = bg.width /2 - triangle.width/2;
triangle.y = bg.y+bg.height;
triangle.rotation=-45;
}
}
}//close class
}//close package


I want to be able to initiate the class like this:


import com.cacao.tooltip;
var newTooltip:tooltip = new tooltip();


But i can`t... it is not working...
Thanks guys.

_kp
December 2nd, 2009, 06:20 AM
I'm not sure but I think something goes wrong in you splitArray(clicked) function.

At toolNumber = Number(clicked.split("button").join("")-1); you are trying to decrease something that is still a String and then convert it to a number. Maybe Number(clicked.split("button").join(""))-1; will help with the error.

What is name of your buttons in loadTexts?

fusionPT
December 3rd, 2009, 05:36 AM
Hi,
the name of the buttons are: "button1", "button2", ...
It's strange because it works as a document class...

_kp
December 3rd, 2009, 06:38 AM
Seems I didn't read the whole error message ;)

The error occurs in your Parse function, after calling it with with Parse(myXML.button); in xmlLoaded function.

Since it works as a document class I think if this[buttonAttr[item]] refers to button1, button2, ... on stage, it should be changed to stage[buttonAttr[item]].

fusionPT
December 3rd, 2009, 09:02 AM
No, it still doesn´t work. I'm sure the problem is there but i can't figure it out. Maybe i have to include that in a ADDED_TO_STAGE?

I'll include the files so if it helps. it needs the as3 caurina in order to work.

Thank you.