|
Быть может кто-то из Вас знает игру 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.
