⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thirdpersoncameragamecomponent.cs

📁 非常优秀的棋牌类游戏源码包含AI及机器的难度调节算法人工智能非常经典
💻 CS
字号:

#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using SceneryComponent.Components;
using Microsoft.Xna.Framework.Input;
#endregion

namespace SceneryComponent.Components
{
    /// <summary>
    /// Componente de c醡ara en tercera persona
    /// </summary>
    public partial class ThirdPersonCameraGameComponent : BaseCameraGameComponent
    {
        // Posici髇 relativa del espectador
        private readonly Vector3 viewerPosition = new Vector3(0f, 5f, 20f);
        // Modelo que sigue la c醡ara
        private TankGameComponent m_ModelToFollow;

        /// <summary>
        /// Obtiene o establece el modelo que sigue la c醡ara
        /// </summary>
        public TankGameComponent ModelToFollow
        {
            get
            {
                return m_ModelToFollow;
            }
            set
            {
                m_ModelToFollow = value;
            }
        }

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="game">Juego</param>
        public ThirdPersonCameraGameComponent(Game game)
            : base(game)
        {

        }

        /// <summary>
        /// Actualiza el estado del componente
        /// </summary>
        /// <param name="gameTime">Tiempo de juego</param>
        public override void Update(GameTime gameTime)
        {
            if (ModelToFollow != null)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                {
                    // Obtener la rotaci髇 del objetivo desde el quaternion
                    Matrix rotation = Matrix.CreateFromQuaternion(ModelToFollow.Rotation);

                    // Calcular la posici髇 relativa de la c醡ara
                    Vector3 transformedCameraPosition = Vector3.Transform(viewerPosition, rotation);

                    // A馻dir la posici髇 relativa de la c醡ara a la posici髇 del modelo para obtener la posici髇 de la c醡ara
                    m_Position = ModelToFollow.Position + transformedCameraPosition;

                    //La c醡ara mira al modelo
                    m_Direction = ModelToFollow.Position - m_Position;

                    // Crear la matriz de vista
                    m_ViewMatrix = Matrix.CreateLookAt(
                        m_Position,
                        m_Position + m_Direction,
                        Vector3.Up);
                }
                else
                {
                    // Establecer la matriz
                    m_ViewMatrix = m_ModelToFollow.CurrentViewMatrix;
                }
            }
        }
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -