Метод переопределения C# не запускается ⇐ C#
-
Anonymous
Метод переопределения C# не запускается
Для студенческого проекта, который я делаю в моноигре, у меня есть словарь со ссылками на все различные объекты в моей игре. Я использую следующую иерархию: Компонент base.Position; установить {base.Position = значение; если (animationManager!= null)animationManager.Position = значение; } } общественный поплавок LinearSpeed {get; набор; } общественная текстура Text2D {get; защищенный набор; } общедоступный объект (текстура Texture2D, скорость плавания) { Позиция = Вектор2.Ноль; Текстура = текстура; Размер = новый Vector2(текстура.Ширина, текстура.Высота); Скорость = Вектор2.Ноль; ЛинейнаяСкорость = скорость; направление = Направление.Вниз; } public Entity (Dictionary анимация, скорость плавания) { Позиция = Вектор2.Ноль; this.animations = анимации; ЛинейнаяСкорость = скорость; Скорость = Вектор2.Ноль; Размер = новый Vector2(анимации[animations.First().Key].frameWidth, анимации[animations.First().Key].frameHeight); анимацияManager = новый AnimationManager(animations.First().Value); направление = Направление.Вниз; } public Entity (анимация анимации, скорость плавающей запятой): this(new Dictionary { { "Idle", анимация } }, скорость) { } публичное переопределение void Update(GameTime gameTime) { } публичное переопределение void LateUpdate(GameTime gameTime) { // Физика Позиция += Скорость * LinearSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; если (animationManager != ноль) { анимацияManager.LateUpdate(gameTime); if (animations.ContainsKey("WalkDown")) SetAnimations(); } } public void DrawEditor (SpriteBatch spriteBatch) { если (animationManager не равно нулю) { анимацияМенеджер.Стоп(); анимацияManager.Draw(spriteBatch, Color.Gray); } еще spriteBatch.Draw(Текстура, Край, Цвет.Серый); } публичное переопределение void Draw(SpriteBatch spriteBatch) { if(animationManager не равен нулю)animationManager.Draw(spriteBatch, Color.White); else spriteBatch.Draw(Текстура, Край, Цвет.Белый); } защищенная виртуальная пустота SetAnimations() { если (Скорость.Y > 0 && Скорость.X == 0) { animationManager.Play(animations["WalkDown"]); направление = Направление.Вниз; } иначе, если (Velocity.Y < 0 && Velocity.X == 0) { animationManager.Play(animations["WalkUp"]); направление = Направление.Вверх; } если (Скорость.X < 0) { animationManager.Play(animations["WalkLeft"]); направление = Направление.Влево; } иначе, если (Velocity.X > 0) { animationManager.Play(animations["WalkRight"]); направление = Направление.Вправо; } иначе, если (Velocity.Y == 0) анимацияManager.Stop(); } public virtual void Activate(Активатор игрока) { } общественная виртуальная пустота Активировать (Подземелье подземелья) { } общедоступный виртуальный клон объекта (копия объекта) { copy.Position = this.Position; копирование.направление = это.направление; if (animationManager не равно нулю) copy.animationManager = this.animationManager.Clone(); copy.animations = this.animations; if(itemContents не равно нулю) copy.itemContents = this.itemContents.Clone(); copy.Size = this.Size; копия.Родитель = этот.Родитель; copy.Velocity = this.Velocity; copy.Texture = this.Texture; copy.IsSelected = this.IsSelected; copy.LinearSpeed = this.LinearSpeed; возврат копии; } общедоступный виртуальный клон объекта() { Копия сущности; если (animationManager не равно нулю) copy = new Entity(animations, LinearSpeed); еще копировать = новый объект (текстура, LinearSpeed); вернуть клон (копия); } public void Serialize (писатель BinaryWriter) { } public void Deserialize (читатель BinaryReader) { } } Враг:
публичный класс Enemy: Entity { public int Health { get; набор; } public int Damage {get; набор; } общественный bool IsAlive {получить; набор; } Компонентная цель; public Enemy (текстура Texture2D, скорость плавания, int hp, int dmg): base (текстура, скорость) { Здоровье = хп; Урон = урон; } public Enemy(Dictionary _animations, floatspeed, int hp, int dmg): base(_animations,speed) { Здоровье = хп; Урон = урон; } public void SetTarget (цель компонента) { Цель = цель; } публичное переопределение void Update(GameTime gameTime) { if(Health Position.X) Скорость = новый Vector2(1, 0); еще Скорость = новый Vector2 (-1, 0); if (Target.Position.Y == Position.Y) Скорость = новый Vector2(Velocity.X, 0); иначе, если (Target.Position.Y > Position.Y) Скорость = новый Vector2(Velocity.X, 1); иначе Скорость = новый Vector2(Velocity.X, -1); } } public override void Activate (активатор игрока) { IsAlive = ложь; } публичное переопределение Entity Clone() { Вражеская копия; если (animationManager не равно нулю) copy = new Enemy(animations, LinearSpeed, Health, Damage); else copy = новый враг (текстура, линейная скорость, здоровье, урон); copy.Health = Здоровье; copy.Damage = Урон; copy.IsAlive = IsAlive; вернуть клон (копия); } } Пила:
публичный класс Sawblade: Enemy { public Sawblade(Dictionary _animations, floatspeed, int hp, int dmg): base(_animations,speed, hp, dmg) { Случайный rng = новый Random(); Скорость = новый Vector2((float)rng.NextDouble(), (float)rng.NextDouble()); animationManager.Play(_animations["Перемещение"]); } публичное переопределение void Update(GameTime gameTime) { if (GameManager.CheckTileCollisions(new Rectangle(Edge.X + (int)Velocity.X, Edge.Y, Edge.Width, Edge.Height))) Скорость = новый Vector2(-Velocity.X, Velocity.Y); if (GameManager.CheckTileCollisions(new Rectangle(Edge.X, Edge.Y + (int)Velocity.Y, Edge.Width, Edge.Height))) Скорость = новый Vector2(Velocity.X, -Velocity.Y); анимацияManager.LateUpdate(gameTime); } }
Для студенческого проекта, который я делаю в моноигре, у меня есть словарь со ссылками на все различные объекты в моей игре. Я использую следующую иерархию: Компонент base.Position; установить {base.Position = значение; если (animationManager!= null)animationManager.Position = значение; } } общественный поплавок LinearSpeed {get; набор; } общественная текстура Text2D {get; защищенный набор; } общедоступный объект (текстура Texture2D, скорость плавания) { Позиция = Вектор2.Ноль; Текстура = текстура; Размер = новый Vector2(текстура.Ширина, текстура.Высота); Скорость = Вектор2.Ноль; ЛинейнаяСкорость = скорость; направление = Направление.Вниз; } public Entity (Dictionary анимация, скорость плавания) { Позиция = Вектор2.Ноль; this.animations = анимации; ЛинейнаяСкорость = скорость; Скорость = Вектор2.Ноль; Размер = новый Vector2(анимации[animations.First().Key].frameWidth, анимации[animations.First().Key].frameHeight); анимацияManager = новый AnimationManager(animations.First().Value); направление = Направление.Вниз; } public Entity (анимация анимации, скорость плавающей запятой): this(new Dictionary { { "Idle", анимация } }, скорость) { } публичное переопределение void Update(GameTime gameTime) { } публичное переопределение void LateUpdate(GameTime gameTime) { // Физика Позиция += Скорость * LinearSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; если (animationManager != ноль) { анимацияManager.LateUpdate(gameTime); if (animations.ContainsKey("WalkDown")) SetAnimations(); } } public void DrawEditor (SpriteBatch spriteBatch) { если (animationManager не равно нулю) { анимацияМенеджер.Стоп(); анимацияManager.Draw(spriteBatch, Color.Gray); } еще spriteBatch.Draw(Текстура, Край, Цвет.Серый); } публичное переопределение void Draw(SpriteBatch spriteBatch) { if(animationManager не равен нулю)animationManager.Draw(spriteBatch, Color.White); else spriteBatch.Draw(Текстура, Край, Цвет.Белый); } защищенная виртуальная пустота SetAnimations() { если (Скорость.Y > 0 && Скорость.X == 0) { animationManager.Play(animations["WalkDown"]); направление = Направление.Вниз; } иначе, если (Velocity.Y < 0 && Velocity.X == 0) { animationManager.Play(animations["WalkUp"]); направление = Направление.Вверх; } если (Скорость.X < 0) { animationManager.Play(animations["WalkLeft"]); направление = Направление.Влево; } иначе, если (Velocity.X > 0) { animationManager.Play(animations["WalkRight"]); направление = Направление.Вправо; } иначе, если (Velocity.Y == 0) анимацияManager.Stop(); } public virtual void Activate(Активатор игрока) { } общественная виртуальная пустота Активировать (Подземелье подземелья) { } общедоступный виртуальный клон объекта (копия объекта) { copy.Position = this.Position; копирование.направление = это.направление; if (animationManager не равно нулю) copy.animationManager = this.animationManager.Clone(); copy.animations = this.animations; if(itemContents не равно нулю) copy.itemContents = this.itemContents.Clone(); copy.Size = this.Size; копия.Родитель = этот.Родитель; copy.Velocity = this.Velocity; copy.Texture = this.Texture; copy.IsSelected = this.IsSelected; copy.LinearSpeed = this.LinearSpeed; возврат копии; } общедоступный виртуальный клон объекта() { Копия сущности; если (animationManager не равно нулю) copy = new Entity(animations, LinearSpeed); еще копировать = новый объект (текстура, LinearSpeed); вернуть клон (копия); } public void Serialize (писатель BinaryWriter) { } public void Deserialize (читатель BinaryReader) { } } Враг:
публичный класс Enemy: Entity { public int Health { get; набор; } public int Damage {get; набор; } общественный bool IsAlive {получить; набор; } Компонентная цель; public Enemy (текстура Texture2D, скорость плавания, int hp, int dmg): base (текстура, скорость) { Здоровье = хп; Урон = урон; } public Enemy(Dictionary _animations, floatspeed, int hp, int dmg): base(_animations,speed) { Здоровье = хп; Урон = урон; } public void SetTarget (цель компонента) { Цель = цель; } публичное переопределение void Update(GameTime gameTime) { if(Health Position.X) Скорость = новый Vector2(1, 0); еще Скорость = новый Vector2 (-1, 0); if (Target.Position.Y == Position.Y) Скорость = новый Vector2(Velocity.X, 0); иначе, если (Target.Position.Y > Position.Y) Скорость = новый Vector2(Velocity.X, 1); иначе Скорость = новый Vector2(Velocity.X, -1); } } public override void Activate (активатор игрока) { IsAlive = ложь; } публичное переопределение Entity Clone() { Вражеская копия; если (animationManager не равно нулю) copy = new Enemy(animations, LinearSpeed, Health, Damage); else copy = новый враг (текстура, линейная скорость, здоровье, урон); copy.Health = Здоровье; copy.Damage = Урон; copy.IsAlive = IsAlive; вернуть клон (копия); } } Пила:
публичный класс Sawblade: Enemy { public Sawblade(Dictionary _animations, floatspeed, int hp, int dmg): base(_animations,speed, hp, dmg) { Случайный rng = новый Random(); Скорость = новый Vector2((float)rng.NextDouble(), (float)rng.NextDouble()); animationManager.Play(_animations["Перемещение"]); } публичное переопределение void Update(GameTime gameTime) { if (GameManager.CheckTileCollisions(new Rectangle(Edge.X + (int)Velocity.X, Edge.Y, Edge.Width, Edge.Height))) Скорость = новый Vector2(-Velocity.X, Velocity.Y); if (GameManager.CheckTileCollisions(new Rectangle(Edge.X, Edge.Y + (int)Velocity.Y, Edge.Width, Edge.Height))) Скорость = новый Vector2(Velocity.X, -Velocity.Y); анимацияManager.LateUpdate(gameTime); } }
Мобильная версия