|
Controllo della rotazione del modello 3D con il mouse
Per chi non ha un pad wired e vuole subito verificare i risultati sulla piattaforma Windows, vediamo ora il set di istruzioni per l'utilizzo del mouse. Una volta compilata l'applicazione, la pressione del tasto sinistroi permetterà di ruotare l'oggetto, la traslazione sui 2 assi di aumentare e diminuire la velocità di rotazione fino all'inversione, il tasto destro di ripristinare la vista iniziale. Innanzitutto modifichiamo il metodo Update come riportato di seguito: protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); //Get some input UpdateInput(); //add velocity to current position modelPosition += modelVelocity; //bleed off velocity over time modelVelocity *= 0.95f; base.Update(gameTime); } Immediatamente sopra al metodo Update, aggiungiamo le seguenti stringhe: //Velocity of the model, applied each frame to the model's position Vector3 modelVelocity = Vector3.Zero; Analogamente al caso precedente notiamo che il metodo Update lancia una particolare funzione, UpdateInput, che di seguito andremo a definire. Per fare ciò, di seguito al metodo Draw, aggiungiamo il codice seguente: protected void UpdateInput() { //get the gamepad state GamePadState currentState = GamePad.GetState(PlayerIndex.One); if (currentState.IsConnected) { // Istruzioni per il pad } else { // istruzioni per il mouse MouseState mouseState = Mouse.GetState(); Rectangle rt = this.Window.ClientBounds; if (mouseState.LeftButton == ButtonState.Pressed) { //Routa clickando il tasto sinistro e accelera traslando il mouse modelRotation -= (mouseState.X - rt.Width / 2) * 0.01f; Vector3 modelVelocity_add = Vector3.Zero; //find out what direction we should be thrusting, using rotation modelVelocity_add.X = -(float)Math.Sin(modelRotation); modelVelocity_add.Z = -(float)Math.Cos(modelRotation); //finally, add this vector to our velocity. modelVelocity += modelVelocity_add; } //Ripristina la vista iniziale if (mouseState.RightButton == ButtonState.Pressed) { modelPosition = Vector3.Zero; modelVelocity = Vector3.Zero; modelRotation = 0.0f; } } }
|