Спонсор: Microsoft
Опубликован: 10.04.2009 | Доступ: свободный | Студентов: 3247 / 243 | Оценка: 4.49 / 4.39 | Длительность: 17:21:00
Специальности: Программист
Самостоятельная работа 4:

Взаимодействие объектов

Обработка попадания точки в круговую область

Идея проверки попадания точки в пределы окружности такова. Нужно рассчитать расстояние между точкой и центром окружности. Если это расстояние не превысит радиус окружности – значит точка находится внутри нее. Создадим новый стандартный игровой проект P4_4, нарисуем окружность и замерим ее радиус. В нашем случае радиус окружности составил 250 пикселей. Добавим изображение в проект и выведем его на экран. Включим отображение указателя мыши в игровом окне. При щелчке левой кнопкой мыши вычислим расстояние от центра окружности до точки, в которой произошел щелчок. Если это расстояние меньше, чем радиус окружности – выведем в заголовок окна сообщение "Вы попали в мишень!", в противном случае выведем сообщение "Вы не попали в мишень". Для реализации данного примера мы ограничились классом Game1, не разрабатывая отдельных игровых компнентов. В листинге 8.10. вы можете видеть код класса Game1.

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace P4_4
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        private Texture2D MySprite;
        private Vector2 position = new Vector2(150, 30);
        MouseState mouse;
        Vector2 Center;
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            
        }

        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
            Center.X = position.X + 250+8;
            Center.Y = position.Y + 250+8;
            this.IsMouseVisible = true;
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);
            MySprite = Content.Load<Texture2D>("circle");
            // TODO: use this.Content to load your game content here
        }

        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            mouse = Mouse.GetState(); 
            if (mouse.LeftButton == ButtonState.Pressed)

            if (IsPointInCircle()) Window.Title = "Вы попали в мишень!";
            else Window.Title = "Вы не попали в мишень!";
            // TODO: Add your update logic here

            base.Update(gameTime);
        }
        bool IsPointInCircle()
        {
                double length = Math.Pow(( Math.Pow((mouse.X - Center.X), 2) + Math.Pow((mouse.Y - Center.Y), 2)),0.5);
                if (length <= 251) return true;
                else return false;
        }
        protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here
            spriteBatch.Begin();
            spriteBatch.Draw(MySprite, position, Color.White);
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }
}
Листинг 8.10. Код класса Game1

На рис. 8.6. вы может видеть игровой экран проекта P4_4.

Игровой экран проекта P4_6

увеличить изображение
Рис. 8.6. Игровой экран проекта P4_6
Alina Lasskaja
Alina Lasskaja

Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить.....