Показать сообщение отдельно
Старый 26.11.2017, 22:20
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 4  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Попробовал реализовать, есть сомнения. Посмотрите фрагменты кода, плиз.
Изначально имеем классы CharacterHero и CharacterEnemy, унаследованные от общего класса Character.
Поскольку в модели персонажей мини-игры есть общие свойства и методы для героя и противника, а есть специфические, создаю модели персонажей для мини-игры в похожей структуре:
Код AS3:
public class BattleCharacterModel  // Модель для общих свойств и методов
	{
		internal var character:Character;
 
		public function BattleCharacterModel (newCharacter: Character) 
		{
character = newCharacter;
		}
}
 
public class BattleCharacterModelHero extends BattleCharacterModel // Класс для модели героя
	{
		public function BattleCharacterModelHero (newCharacter: CharacterHero) 
		{
			super(newCharacter);
		}
Беда в том, что после создания экземпляров при попытке обратиться к свойствам, установленным для CharacterHero, через _heroModel.character.'имя свойства', получаю ошибку. Мне это кажется странным, т.к. установленная типизация исключает записи в переменную character класса BattleCharacterModelHero значения иного типа, кроме CharacterHero.

Как итог пока нашёл решение с заданием переменных Character непосредственно в классах-наследниках, но что-то меня в этом варианте смущает. Пока правда, не понимаю, что контретно. Вот так получилось:

Код AS3:
public class BattleCharacterModel  // Модель для общих свойств и методов
	{
		public function BattleCharacterModel () 
		{
		}
}
 
public class BattleCharacterModelHero extends BattleCharacterModel // Класс для модели героя
	{
		internal var character: CharacterHero;		
                public function BattleCharacterModelHero (newCharacter: CharacterHero) 
		{
			character = newCharacter;
		}