Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.02.2016, 14:05
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию override как правильно переопределять метод?

Доброго!
Дошло дело до различного поведения hero, строить километровые зависимости if else не хочется. Как красивый вариант дуаю подойдёт переопределение методов. Так вот, как правильно всё это дело построить?
вот поведение по умолчанию, отрывок из класса, используется Nape

Код AS3:
		private function preListenerCatAndMouse(cb:PreCallback):PreFlag
		{
			if (cb.int1.castBody.velocity.y > 0)
			{
				cb.int1.castBody.velocity.y *= -1;
			}
			else cb.int1.castBody.velocity.y -= 50;
			cb.int2.castBody.userData.collisionBoolean = true;
			if (!unlockedJumpBoolean)
			{
				stage.dispatchEvent(new UserEvent(UserEvent.UNLOCKED_JUMP, true, false))
				unlockedJumpBoolean = true;
			}
			return PreFlag.IGNORE_ONCE;
		}
так вот, мне нужно создать класс, который наследует приведённый и там переопределять данный метод? Т.е. этот код по умолчанию оставить, далее в дочернем классе сделать несколько вариантов переопределенного метода и повесить слушателя. Именно так делается? Nape такое съест нормально?

Добавлено через 21 минуту
А вообще можно-то переопределить метод, который вызывает слушатель?

Старый 22.02.2016, 14:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
приватные методы недоступны наследнику.
__________________
Reality.getBounds(this);

Старый 22.02.2016, 14:35
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Цитата:
Сообщение от Wolsh Посмотреть сообщение
приватные методы недоступны наследнику.
это я уже выяснил, щас стоит protected

Старый 22.02.2016, 14:36
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Надо определить доступ как protected, тогда возможен override.
Однако вот это
Цитата:
в дочернем классе сделать несколько вариантов переопределенного метода
невозможно. Хоть в дочернем, хоть в каком)))

Добавлено через 3 минуты
но, думаю, Вы имели ввиду всё-таки РАЗНЫХ наследников Hero.
__________________
Reality.getBounds(this);

Старый 22.02.2016, 14:44
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Надо определить доступ как protected, тогда возможен override.
Однако вот это невозможно. Хоть в дочернем, хоть в каком)))

Добавлено через 3 минуты
но, думаю, Вы имели ввиду всё-таки РАЗНЫХ наследников Hero.
у меня hero, в игре получает разные способности на некоторое время и его поведение и управление соответственно изменяется. Как такое правильно и красиво организовать?

Старый 22.02.2016, 15:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
сделай просто свитч
Код AS3:
protected function changeSkills(skillType:String):void {
   switch (skillType) {
      case "barf":
            activateBarfingSkills();
            break;
      case "fart":
            activateFartingSkills();
            break;
      default: activateNormalBehavior();
            break;
   }
}
__________________
Ко мне можно и нужно обращаться на ты)

Старый 22.02.2016, 15:29
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 7  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Цитата:
Сообщение от caseyryan Посмотреть сообщение
сделай просто свитч
Код AS3:
protected function changeSkills(skillType:String):void {
   switch (skillType) {
      case "barf":
            activateBarfingSkills();
            break;
      case "fart":
            activateFartingSkills();
            break;
      default: activateNormalBehavior();
            break;
   }
}
хм, я о таком варианте не думал и не очень представляю как его реализовать, учитывая, что мне нужно сохранить имя класса, т.к. не очень представляю, как в Nape подставить иное имя метода для обработки столкновений, не написав ещё один обработчик событий. Мне кажется, что придётся возиться несколькими обработчиками, останавливая и перезапуская их. Если можно, поподробнее, я возможно просто пока не понимаю как это красиво реализовать

Пока только вижу и двигаюсь к варианту, внутри класса написать приватные классы (можно конечно и отдельные, но не вижу смысла делать 5-7 классов в 10 строчек кода). В них же (приватных) и переопределять метод(ы). А в основном классе просто навещать слушателей событий, которые будут вызывать необходимый приватный класс

Старый 22.02.2016, 15:56
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Зачем тебе в нейпе подсовывать какое-то другое имя метода? Там при регистрации столкновения в метод-обработчик передается InteractionCallback вот так:
Код AS3:
private function onCollision(collision:InteractionCallback):void {
	// ты можешь просто проверить тип события здесь		
	if (collision.event == CbEvent.ONGOING) {
             // ...
        } else if (collision.event == CbEvent.BEGIN) {
             // ...
        }
}
что мешает сделать так?
У тебя какая-то сплошная каша и в коде и в вопросе. По-моему то, что ты хочешь сделать (если я правильно это понял), реализуется именно проверкой условия. Не нужно никаких методо переопределять.
Переопределение требуется, допустим, если у тебя есть 2 разных класса персонажей, которые ведут себя по разному. Скажем, один идет, а другой идет, и после каждого шага подпрыгивает.
Так ты в базом классе пишешь метод ходьбы.

Код AS3:
protected function walk():void {
    // тут код ходьбы
}
а в том классе, где требуется еще и подпрыгивание, пишешь переопределение
Код AS3:
override protected function walk():void {
    super.walk(); // сначала вызываем обший метод ходьбы, а потом делаем прыжок
    jump();
}
Вот как-то так.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 22.02.2016, 16:22
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 9  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
caseyryan
хм, я не совсем понял ваш пример, как он мне поможет.

Я использую только PreCallback, остальные не нужны
Что я хочу сделать, есть персонаж, ведёт себя заранее опрелённым образом и обрабатывается определённое взаимодействие с Nape, пусть обрабатываются столкновения определённым образом. Дальше происходит событие и он теперь столкновение вообще не учитывает. Дальше происходит новое событие, столкновения снова учитываются, но уже другая реакция. При этом это не однократно, а в течении определённого времени. Простой пример, перс не может проходить сквозь стены, берёт очивку и в течении 10 секунд может

Старый 22.02.2016, 17:26
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 10  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
это классическая задача для использования stateMachine, под AS вроде есть готовы либы, но лучше написать самому чтобы лучше разобраться. переопределение методов не совсем тот случай. игровые ситуации бывают оч сложные
первое из гугла по теме http://www.gamedev.ru/code/articles/..._state_machine

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.