Быть может кто-то из Вас знает игру Sims, к какому жанру она относиться? Жизненная симуляция, ролевая игра, там можно и дома строить..... |
Взаимодействие объектов
Обработка попадания точки в круговую область
Идея проверки попадания точки в пределы окружности такова. Нужно рассчитать расстояние между точкой и центром окружности. Если это расстояние не превысит радиус окружности – значит точка находится внутри нее. Создадим новый стандартный игровой проект 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.