Con esta nueva entrada se da continuidad a la ya dilatada serie de artículos dedicados al desarrollo de aplicaciones para dispositivos tablet multitouch con Ms Windows 7 en relación a su propiedad Inertia. La serie presentaría con este nuevo post ya su séptimo artículo.

Inertia
Estos serian los enlaces a las anteriores entradas de la serie:
Tablets MultiTouch con MS Windows 7: Inertia (I)
Tablets MultiTouch con MS Windows 7: Inertia (II)
Tablets MultiTouch con MS Windows 7: Inertia (II)
Tablets MultiTouch con MS Windows 7: Inertia (IV)
Tablets MultiTouch con MS Windows 7: Inertia (V)
Tablets MultiTouch con MS Windows 7: Inertia (VI)
En la última entrada se hizo referencia la clase “Picture Tracker“, encargado de gestionar los movimientos inerciales del objeto donde se aplica. La clase “Picturetacker” presenta los métodos necesarios para tratar los eventos relacionados con “Inertia” como son “ProcessMove” , “ProcessmanipulationDelta” y el principal evento, el disparador de inercia, “OnBeforeInertia”. Se muestra a continuación una imagen con la estructura de esta importante clase:

PictureTracker
Esta clase se encarga de monitorizar y dotar de movimiento al objeto cuando es lanzado, así como calcular el resto del movimiento y velocidades que éste adquiere. Profundizando un poco más en la clase nos detenemos en el evento “OnBeforeinertia” del cual se recogen a continuación sus líneas de código:
void OnBeforeInertia(object sender, BeforeInertiaEventArgs e)
{
//Tell the tracker manager that the user removed the fingers
_pictureTrackerManager.InInertia(this);
_processor.InertiaProcessor.InertiaTimerInterval = 15;
_processor.InertiaProcessor.MaxInertiaSteps = 500;
_processor.InertiaProcessor.InitialVelocity = _inertiaParam.InitialVelocity;
_processor.InertiaProcessor.DesiredDisplacement = _inertiaParam.InitialVelocity.Magnitude * 50;
_processor.InertiaProcessor.InitialAngularVelocity = _inertiaParam.InitialAngularVelocity;
_processor.InertiaProcessor.DesiredRotation = Math.Abs(_inertiaParam.InitialAngularVelocity * _processor.InertiaProcessor.InertiaTimerInterval * 540F / (float)Math.PI);
_processor.InertiaProcessor.InitialExpansionVelocity = _inertiaParam.InitialExpansionVelocity;
_processor.InertiaProcessor.DesiredExpansion = Math.Abs(_inertiaParam.InitialExpansionVelocity * 4F);
}
Analizando estas líneas el primer aspecto a considerar es la dependencia del objeto “_inertiaParam”, éste se actualiza y crea desde el método “ProcessmanipulationDelta” siendo además el encargado de manipular las propiedades relacionadas con “Inertia”, para redibujar el objeto o modificar la velocidad del mismo según se va desplazando inercialmente. Esto puede apreciarse en la siguiente línea de código del método “ProcessmanipulationDelta” :
//Update inertia calculation. Take 40 percent from the previos data
_inertiaParam.Update(e, 0.4F);
La velocidad se va actualizando a un 0,4. Esto quiere decir que se va perdiendo un 40 % de su velocidad inicial. Ello es debido a la forma de actuar de “_inertiaParam.Update” como se refleja en las líneas de su código correspondiente en la variable “InitialVelocity”:
public void Update(ManipulationDeltaEventArgs e, float history)
{
float elappsedMS = (float)_stopwatch.ElapsedMilliseconds;
if (elappsedMS == 0)
elappsedMS = 1;
InitialVelocity = InitialVelocity * history + ((VectorF)e.TranslationDelta * (1F - history)) / elappsedMS;
InitialAngularVelocity = InitialAngularVelocity * history + (e.RotationDelta * (1F - history)) / elappsedMS;
InitialExpansionVelocity = InitialExpansionVelocity * history + (e.ExpansionDelta * (1F - history)) / elappsedMS;
_stopwatch.Reset();
_stopwatch.Start();
}
Para modificar o prolongar la velocidad de detención es posible variar la forma de reducir la velocidad o modificar el factor de frenada del objeto con lo visto anteriormente.
Con la entrada de hoy se ha visto como controlar la velocidad de inercia de nuestros objetos modificando los parámetros necesarios. En la próxima entrada veremos cómo asociar una imagen a las propiedades de “Inertia” para disponer así de todos los apartados para finalizar nuestra aplicación de uso de “Inertia”.
Para acabar, recuerda que si quieres aprender mucho más sobre los secretos de los sistemas Microsoft Windows, te recomendamos leer el libro de Sergio de los Santos "Máxima Seguridad en Windows: Secretos Técnicos" , o siempre puedes suscribirte al Canal RSS de Windows Técnico para estar al día de las novedades e información técnica de interés.

Enviado
jun 10 2011, 06:13
por
Ignacio Briones