PDA

View Full Version : Action script is filling up my memory or something


ruben.van.rooij
10-14-2009, 06:03 PM
Hi there,

I'm busy with my first AS script :) .
Now the problem is that everytime i play the script and I'm moving my mouse like a crazy ass,, flash gives up. It's like my memory is just filling up. Hope someone can help me with this. My script is (I also attached the whole file):

function GetSpeed(OldX, OldY) {
var DifferenceX:Number;
var DifferenceY:Number;

if(OldX) {
if(OldX > mouseX) {
DifferenceX = OldX - mouseX;
} else {
DifferenceX = mouseX - OldX;
}

if(OldY > mouseY) {
DifferenceY = OldY - mouseY;
} else {
DifferenceY = mouseY - OldY;
}

var difference = Math.pow(DifferenceX, 2) + Math.pow(DifferenceY, 2);

var speed = Math.round(Math.sqrt(difference));

Tekst1.text = 'Speed: ' + speed;

Round.x = mouseX;
Round.y = mouseY;

Round.width = 10 + speed * 2;
Round.height = 10 + speed * 2;
}
var OldY = mouseY;
var OldX = mouseX;
setTimeout(function() { GetSpeed(OldX, OldY); }, 10);
}
GetSpeed(mouseX, mouseY);

bowljoman
10-14-2009, 06:40 PM
setTimeout(function() { GetSpeed(OldX, OldY); }, 10);



is likely the culprit. You make a new instance of the function every time the parent function is called.

ruben.van.rooij
10-14-2009, 07:00 PM
Okey,, what's the proper way to loop a function than?

bowljoman
10-14-2009, 07:15 PM
function GetSpeed(OldX, OldY) {
var DifferenceX:Number;
var DifferenceY:Number;

if(OldX) {
if(OldX > mouseX) {
DifferenceX = OldX - mouseX;
} else {
DifferenceX = mouseX - OldX;
}

if(OldY > mouseY) {
DifferenceY = OldY - mouseY;
} else {
DifferenceY = mouseY - OldY;
}

var difference = Math.pow(DifferenceX, 2) + Math.pow(DifferenceY, 2);

var speed = Math.round(Math.sqrt(difference));

Tekst1.text = 'Speed: ' + speed;

Round.x = mouseX;
Round.y = mouseY;

Round.width = 10 + speed * 2;
Round.height = 10 + speed * 2;
}
var OldY = mouseY;
var OldX = mouseX;
setTimeout( GetSpeed, 10, OldX, OldY);
}
GetSpeed(mouseX, mouseY);

ruben.van.rooij
10-14-2009, 07:17 PM
First of all, thanks for the quick responses.

I tried it. But still it won't work.

devilmaycry
10-14-2009, 07:22 PM
hello, i would use the enterFrame event


var OldX:Number=mouseX;
var OldY:Number=mouseX;
function GetSpeed(e:Event) {

var DifferenceX:Number;
var DifferenceY:Number;

if(OldX) {
if(OldX > mouseX) {
DifferenceX = OldX - mouseX;
} else {
DifferenceX = mouseX - OldX;
}

if(OldY > mouseY) {
DifferenceY = OldY - mouseY;
} else {
DifferenceY = mouseY - OldY;
}

var difference = Math.pow(DifferenceX, 2) + Math.pow(DifferenceY, 2);

var speed = Math.round(Math.sqrt(difference));

Tekst1.text = 'Speed: ' + speed;

Round.x = mouseX;
Round.y = mouseY;

Round.width = 10 + speed * 2;
Round.height = 10 + speed * 2;
}
OldY = mouseY;
OldX = mouseX;
}

this.addEventListener("enterFrame",GetSpeed);

ruben.van.rooij
10-14-2009, 07:30 PM
Works like a charm!! Thanks ;)

henke37
10-15-2009, 05:50 AM
You had an exponental growth due to the saved scope each time.