Avatar billede madsringblom Nybegynder
05. februar 2012 - 11:56

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;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester