No hablo de cuando se presiona hacia el lado contrario, sino simplemente cuando se deja de presionar el botón de avanzar.

Me parece que es mejor si pongo un parámetro stop, que determine cuan rápido frena el personaje. En caso que corra, frenaría más lento.

En el juego original de Mario eso sucede así, pero no sé cómo es el parámetro, no lo entiendo.

Caminando tarda 1 baldosa y media en frenar. Y corriendo tarda 3 y media. Siempre digo más o menos.

Bueno, yo lo hice así:

Código :

GRavedad = 0.05;
// Mario
MarioSalto = -3;
MarioSpeed = 0.05;
MarioSpeedMax = 0.5;
MarioRun = 0.15;
MarioRunMax = 1.5;
MarioStop = 0.02;

onClipEvent (load) {
    MarioVX = 0;
    MarioSaltoE = 0;
    MarioVY = 0;
}
onClipEvent (enterFrame) {
    if (MarioSaltoE == 0) {
        // Si no está saltando.
        if (Key.isDown(39)) {
            // Si se presiona derecha.
            if (Key.isDown(83)) {
                // Si se presiona S (correr).
                if (MarioVX < _root.MarioRunMax) {
                    // Si no está a la máxima velocidad, aumenta.
                    MarioVX = MarioVX+_root.MarioRun;
                    if (MarioVX > _root.MarioRunMax) {
                        // Si sobrepasa la máxima, la iguala.
                        MarioVX = _root.MarioRunMax;
                    }
                }
            } else {
                // Si se presiona derecha pero no S, camina.
                if (MarioVX > _root.MarioSpeedMax) {
                    // Si estaba corriendo, disminuye velocidad.
                    [b]MarioVX = MarioVX-_root.MarioStop;[/b]
                }
                if (MarioVX < _root.MarioSpeedMax) {
                    // Si no está a la máxima velocidad (de caminar), aumenta.
                    MarioVX = MarioVX+_root.MarioSpeed;
                    if (MarioVX > _root.MarioSpeedMax) {
                        // Si sobrepasa la máxima, la iguala.
                        MarioVX = _root.MarioSpeedMax;
                    }
                }
            }
            this._x = this._x + MarioVX;
        } else if (MarioVX  > 0) {
            // Si no se presiona moverse pero estaba moviendose, frena.
            MarioVX = MarioVX-_root.MarioStop;
            if (MarioVX < 0) {
                // Si frena demasiado, la velocidad pasa a 0.
                MarioVX = 0;
            }
            this._x = this._x + MarioVX;
        }
        if (Key.isDown(65)) {
            // Salta (A).
            MarioSaltoE = 1;
            if (MarioDir == 1) {
                // Si mira a la derecha.
                gotoAndStop (3);
            } else {
                // A la izquierda.
                gotoAndStop (4);
            }
            MarioVY = _root.MarioSalto + _root.Gravedad;
            this._y = this._y + MarioVY;
        }
    } else if (MarioSaltoE == 1) {
        // Está saltando.
        if (Key.isDown(65)) {
            MarioVY = MarioVY + _root.Gravedad;
            if (MarioVY >= 0) {
                MarioSaltoE = -1;
            }
        } else {
            MarioSaltoE = -1;
            MarioVY = 0;
        }
        this._y = this._y + MarioVY;
    } else {
        MarioVY = MarioVY + _root.Gravedad;
        this._y = this._y + MarioVY;
        if (this._y >= 295) {
            this._y = 295;
            MarioSaltoE = 0;
            MarioVY = 0;
            gotoAndStop (1);
        }
    }
}

https://dl.dropboxusercontent.com/u/169164922/007.swf
Corre con S, y sólo se mueve hacia la derecha. El salto está bien pero no está hecho aún para funcionar conjuntamente con el movimiento X.

Lo que está en negrita está mal, pero no big deal, es que lo noté ahora. Bueno, lo que sucede es que caminando frena muy rápido, y corriendo frena demasiado lento.

MarioSpeed debe ser bajo, pues sino no se podría hacer pequeños movimientos.
Si aumento el stop, frena demasiado rápido cuando camina, quizá hay un número que no cause algo de demasía, pero no sé cual sería, probé varios.

En cuanto a las máximas velocidades, pues no sé ¿están mal?

No quiero hacer una imitación exacta, pero tampoco tan diferente, no sé.

Gracias.