Reputation: 1
I recently started flash programming, I have problems with a move function that dose not show the movement,
the code i use:
function cardmove(card){
xDiff=(playerHand+space+card.width)-card._x;
yDiff=(Stage.height/2+space)-card._y;
speedx =xDiff/10;
speedy =yDiff/10;
for (frame=0;frame<10;frame++){
card._x+=speedx;
card._y+=speedy;}
playerHand = card._x ;
}
the card is in place it should be right on start, and no movement is displayed.
Upvotes: 0
Views: 76
Reputation: 325
Flash does not refresh the layout during a loop. If you want to move something, you have to give the hand back to flash between two steps.
You have two main way to do it, the setInterval :
// You need to declare this variables to access them in the function "applyMovement"
var _nInterval:Number;
var _nSteps:Number;
// Yout function
function cardmove(card){
xDiff=(playerHand+space+card.width)-card._x;
yDiff=(Stage.height/2+space)-card._y;
speedx =xDiff/10;
speedy = yDiff / 10;
// Set the steps to 10
_nSteps = 10;
// Before start the setInterval, you have to stop a previous one
clearInterval(_nInterval);
// You call the function each 41 ms (about 24 fps) with the parameters
setInterval(this, "applyMovement", 41, card, speedx, speedy);
}
// This function apply the new coodinates
function applyMovement(mc:MovieClip, nX:Number, nY:Number) {
if (_nSteps >= 0) {
mc._x += nX;
mc._y += nY;
}else {
clearInterval(_nInterval);
}
_nSteps --;
}
or the onEnterFrame :
// You need to declare this variables to access them in the function "applyMovement"
var _nSteps:Number;
var _mc:MovieClip;
var _nX:Number;
var _nY:Number;
// Yout function
function cardmove(card){
xDiff=(playerHand+space+card.width)-card._x;
yDiff=(Stage.height/2+space)-card._y;
_nX =xDiff/10;
_nY = yDiff / 10;
_mc = card;
// Set the steps to 10
_nSteps = 10;
// You have to use the Delegate function to access to the "good" this in the function
this.onEnterFrame = mx.utils.Delagate.create(this,applyMovement);
}
// This function apply the new coodinates
function applyMovement() {
if (_nSteps >= 0) {
_mc._x += nX;
_mc._y += nY;
}else {
delete this.onEnterFrame;
}
_nSteps --;
}
Upvotes: 1