Eleastisk snor fryser browseren.
Hej Eksperter.Jeg er kommet ud hvor jeg ikke kan bunde i actionscript.
Kort sagt har med udgangspunkt i et script der laver en elastisk linie fra musen til et punkt (http://swamy-techtalk.blogspot.com/2011/07/elastic-string-to-mouse-pointer-effect.html) rettet til så det laver en linie fra et punkt til et trækbart MovieClip der samtidig roterer i forhold til udgangspunktet.
Det virker også det meste af tiden. Men nogle gange fryser den og jeg bliver nødt til at genstarte flash (eller browseren når jeg tester der)
Hvis jeg venter et stykke tid får jeg følgende fejlmelding og kan lukke vinduet istedet for at genstarte.
"Error: Error #1502: A script has executed for longer than the default timeout period of 15 seconds.
at pullstring_v6_fla::CordholderMC_1/Interpolate()
at pullstring_v6_fla::CordholderMC_1/onmove1()"
Som sagt er jeg lidt ude hvor jeg ikke kan bunde da jeg på ingen måde er haj til AS og slet ikke AS3. På forhånd tak for al hjælp!
Se scriptet i aktion her: www.madsringblom.dk/flash/pullstring.html
(Vær opmærksom på at det kan fryse din browser)
Hele scriptet herunder:
Object(this).leaf_mc.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
var origX:int = Object(this).leaf_mc.x + 1;
var origY:int = Object(this).leaf_mc.y + 2;
var pullbackX:int = Object(this).leaf_mc.x;
var pullbackY:int = Object(this).leaf_mc.y;
var dragging:Boolean = false;
var speed:int = 15;
var addX:int = 2
var addY:int = 3
function mouseDownHandler(e:MouseEvent):void {
var obj = e.target;
obj.startDrag();
dragging = true;
}
function mouseUpHandler(e:MouseEvent):void {
var obj = e.target;
Object(this).leaf_mc.stopDrag();
dragging = false;
}
import flash.display.*;
import flash.events.MouseEvent;
import flash.events.Event;
var haschild:Boolean = false;
var gotonodes:Array = new Array();
var currentnodes:Array = new Array();
var posX:int = Object(this).leaf_mc.x + addX;
var posY:int = Object(this).leaf_mc.y + addY;
gotonodes=Interpolate(posX,posY,origX,origY,25);
currentnodes=gotonodes;
stage.addEventListener(Event.ENTER_FRAME, onmove1);
function onmove1(e:Event){
for(var node = 0; node<gotonodes.length-1;node++){
currentnodes[node].xco=currentnodes[node].xco+(gotonodes[node].xco-currentnodes[node].xco)/(node*node/30+1);
currentnodes[node].yco=currentnodes[node].yco+(gotonodes[node].yco-currentnodes[node].yco)/(node*node/30+1);
}
var posX:int = Object(this).leaf_mc.x + addX;
var posY:int = Object(this).leaf_mc.y + addY;
gotonodes=Interpolate(posX,posY,origX,origY,25);
if(dragging == false){
Object(this).leaf_mc.x-=(Object(this).leaf_mc.x-pullbackX)/speed;
Object(this).leaf_mc.y-=(Object(this).leaf_mc.y-pullbackY)/speed;
Object(this).leaf_mc.rotation+=Object(this).leaf_mc.rotation/speed;
}
var theX:int = origX - Object(this).leaf_mc.x;
var theY:int = (origY - Object(this).leaf_mc.y) * -1;
var angle = Math.atan(theY/theX)/(Math.PI/180);
Math.atan(-5/10)/(Math.PI/180);
if (theX<0) {
angle += 180;
}
if (theX>=0 && theY<0) {
angle += 360;
}
Object(this).leaf_mc.rotation = (angle*-1) + 90;
DrawNodes(currentnodes);
}
function FindAngle(x1, x2, y1, y2):Number {
return Math.atan2(y2-y1, x2-x1);
};
function Distance(x1,x2,y1,y2):Number{
return Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));
}
function Interpolate(x1,y1,x2,y2,n):Array{
var dist= Distance(x1,x2,y1,y2);
var ang = FindAngle(x1,x2,y1,y2);
var points = [];
for(var l = 0;l <=dist;l+=dist/n){
var x3 =x1+l*Math.cos(ang);
var y3 = y1+l*Math.sin(ang);
points.push({xco:x3,yco:y3});
}
points.push({xco:x1,yco:y1});
return points;
}
function DrawNodes(array):void{
if(haschild)
{
this.removeChildAt(1);
haschild=false;
}
var shape:Shape = new Shape();
shape.graphics.lineStyle(1,0x331100,40);
shape.graphics.moveTo(array[0].xco,array[0].yco);
for(var i = 0; i < array.length-1;i++){
shape.graphics.lineTo(array[i].xco,array[i].yco);
}
shape.graphics.beginFill(0xFBFFA4,1);
shape.graphics.drawCircle(array[0].xco,array[0].yco,1);
shape.graphics.endFill();
this.addChild(shape);
haschild=true;
}