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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.04.2010, 22:36
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 21  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Вы сами мне это сказали, а сейчас высмеиваете себя же?
зачем мне кого-то высмеивать? не надо так бурно реагировать на невинные шутейные пассажи)))

Цитата:
устройство управления в электронике и вычислительной технике.
Вы управляете клавиатурой? Вы её слушаете.
я управляю потоком клавиатурных событий нажатия/отжатия кнопок
если говорить общо, то "контроллер" - это нечто, имеющее что-то на входе и на выходе

на входе я имею нажатия/отжатия клавиш, на выходе фильтрованные события

Не думайте, что я ставлю себя выше вас - это не так. Я представляю свое видение, вы - свое. Вы можете соглашаться или наоборот. Можете меня даже переубедить - я только рад буду, что меня ткнули носом туда, где я косячу. Но пока я не вижу весомых аргументов своей неправоты.
__________________
скриптограф

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Если говорить общо, то контроллер "чего-то" - это нечто, отдающее "чему-то" управляющие команды. Клавиатура - контроллер. Но "контроллер клавиатуры" это пользователь. Ваше определение "что-то на входе и на выходе" слишком "общо" и подходит к чему угодно, т.е. никак не конкретизирует функциональность объекта на уровне определения - контроллер или адаптер, или конвертер, или драйвер, или просто дисплей? На этом уровне определений "контроллер" - "то что отдает команды". То, что хотите получить Вы - контроллер персонажа, контроллируемый клавиатурой. Это о терминах. Используйте термины правильно, и Вас будут "слышать" и "понимать". Используйте свои определения, и все вокруг станут глухими идиотами, предлагающими "совсем не то".
2. Игры посложнее "пройти из точки А в точку В" занимаются расчетом и визуализацией СОСТОЯНИЙ. Как ни парадоксально, события нажатия клавиш в них дело десятое. Это вопрос архитектуры, что удобнее - слушать события или отображать состояние модели каждый интервал времени. У клавиатуры всего два события, но сотни состояний. Фактически клавиатура является моделью персонажа, и "блокнот" silin'a здесь как никогда уместен. То, что написали Вы - представляет клавиатуру как источник сигналов, то, что класс silin'a имеет на входе. Другими словами, чтобы пользоваться Вашим классом, надо написать к нему аналог класса silin'a, создающий модель из тех же событий "нажата" и "отпущена".
Ваше разделение на отдельные события непродуктивно - если при нажатии клавиши надо сделать что-то сложнее "начать смещаться вправо в полной пустоте" (х++) и нужны проверки ВЗАИМОДЕЙСТВИЯ с миром, в конечном итоге все обработчики будут вызывать один и тот же метод "изменить состояние модели персонажа" в контроллере сцены или персонажа, передавая ему еще какой-то код-константу, в реальности содержащий все тот же "нажали W". И в этом методе контроллера будет ровно столько же if'ов и switch'ей, как если бы Вы получили простое событие клавиатуры и проверяли "W? делаем то-то - а именно - проверяем текущее СОСТОЯНИЕ персонажа и мира и вносим изменения, если они допустимы". Не слишком ли долгий путь для простого стандартного события клавиатуры?
Ваше мнение?
__________________
Reality.getBounds(this);

Старый 01.05.2010, 13:55
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 23  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
1. Можно спорить до бесконечности. Можно даже спорить "контроллер клавиатуры" - это тот, кто жмет на клавиатуру, или это чип, встроенный в клаву и выдающий сигналы (знаете такое выражение "контроллер клавы сгорел" - человек сгорел? о, майн гот)))) Соответственно программный контроллер выдает программные сигналы.
Выключатель (например света) - это контроллер: человек жмет выключатель (дает на вход сигнал состояния тумблера), контроллер делает внутреннее действие (замыкает/размыкает внутренний участок цепи) и на выходе мы имеем результат "замкнут/разомкнут". И, заметьте, никем он не управляет. Если к нему подключить лампочку, или группу лампочек (навесить слушатель), то благодаря состояниям контроллера на выходе, они будут загораться/тухнуть. С таким же успехом можно подключить радио к тому же переключателю. При этом наш переключатель абсолютно никем не управляет целенаправленно - т.е. он не был создан только включать/выключать лампочки - он был создан давать на выходе состояние (отсылать событие), чтобы все, кому надо, им пользовались. Вы хотите сказать, что человек - это контроллер выключателя? Я б обиделся за человека)))

2. Я не мешаю в одной куче проверку состояний объекта в мире и команды, которые объект должен получить. У меня подход такой: существует пул ф-ий, который обрабатывается в слушателе смены кадров или событий таймера. На основе этого пула персоонаж выполняет действия. Если команда дана, она должна быть обработана - пусть это делает отдельный поведенческий класс, который уже решает, что добавить в пул. Что это дает? Интерактивный объект не зависит ни от чего - он вещь в себе. На него вешается любой поведенческий класс и любой контроллер. И никто друг о друге ничего не знает и друг на друга не завязан.

Единственное, что я сейчас рассматриваю вариант не вешать отдельное событие на каждое действо контроллера, а отсылать общее событие "changed" в результате которого брать пул текущих состояний - слушатель один, смысл тот же.

P.S. забудьте определения из MVC - окружающий мир и, в частности, ООП на MVC не заканчиваются.
__________________
скриптограф


Последний раз редактировалось orcpochta; 01.05.2010 в 14:01.
Старый 01.05.2010, 15:54
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 24  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Хаха. Выключатель - контроллер тока в цепи.
2.
Цитата:
Интерактивный объект не зависит ни от чего - он вещь в себе.
Ну вот игры, где персонаж ни от чего не зависит и просто плавает в пустоте, и делайте дальше. Ваш класс как раз для этого.
Цитата:
слушатель один, смысл тот же.
Вот именно. Абсолютно тот же, что просто повесить слушатель KeyboardEvent.

p.S. Когда я начинал писать свою первую игру, я понятия не имел об MVC - я и сейчас-то не очень представляю, что там происходит. И первое, что я написал - класс для удобного назначения клавиш. Ирония в том, что назывался он у меня KeyboardController)). Только разница в том, что я был нуб нубом, а Вы даже знаете MVC))) Я хочу сказать, что забывай-не забывай, называй как хочешь, а всегда останется клавиатура/мышь, системник и монитор. И все Ваши действия будут обрабатываться контроллером, который создаст модель изображения и отдаст его монитору. Хотите предложить другой вариант - валяйте. Почему я использую понятные большинству термины - контроллер и модель - я уже сказал выше. Но руководствуюсь я обычной человеческой логикой, т.е. по-другому устройство просто не представляю. А как там это называется на программерском сленге - мне как-то все равно. Это - естественное состояние вещей, и уходить от него если и можно, то точно не имеет смысла. Вы сделайте игру, и все само встанет на свои места. Даже в обычном пустом лабиринте Вы не сможете двигать шарик влево, не проверив наличие стен. Так что нет никакого "поведенческого класса", есть система мир+персонаж, и персонаж не выполняет какие то действия, пришедшие прямо с клавиатуры - что ему делать, решает... простите, контроллер на основе модели. Как бы Вы их ни называли.
Слушаю Ваш вариант управления персонажем. Управления, которое ничего кроме персонажа не знает и никак на мир не завязано.
__________________
Reality.getBounds(this);

Старый 01.05.2010, 16:01
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 25  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Выключатель - контроллер всегда. Только его иногда не "слушают")))
Транзистор тоже только на плате является транзистором?

Если брать игры в общем, а не подкатегорию, на которую вы сейчас опираете, то можно вспомнить всякие арканоиды, дезерт страйки и т.д., где надо двигать персоонаж, а окружающий мир второстепенен. Игры, где идет взаимодействие с окружающим миром, - это подкласс. У меня есть контроллер для всего класса игр, с помощью нехитрых фокусов он будет взаимодействовать и с вашим подклассом. В чем проблема-то?
__________________
скриптограф


Последний раз редактировалось orcpochta; 01.05.2010 в 16:06.
Старый 01.05.2010, 16:10
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 26  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Проблема в том, что Вам придется, рано или поздно, эти манипуляции произвести. Каким бы классным ни был уже имеемый контроллер
__________________
...вселенская грусть

Старый 01.05.2010, 16:14
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 27  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Ну вот у меня сейчас есть вертолет с трехфазным движением вперед/назад и поворот лево/право. Трехфазность заключается в том, что есть плавный разгон, движение на предельной скорости, плавное торможение. Все организовано предельно ясно и отлично работает при совместном нажатии клавиш (например вперед и влево). Без всяких ифов, кейсов и т.д. Смотрю и радуюсь. И я не вижу, какие еще манипуляции мне надо произвести - все уже работает предельно четко и корректно.
__________________
скриптограф

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Выключатель - контроллер всегда.
Вот именно - он контроллирует участок цепи. Лампочка загорается не от того, что нажали на выключатель, а оттого что есть ток. Точно так же нажатая клавиша вовсе не означает выполнение конкретного действия - это только участок цепи, искусственного интеллекта, который определит - "гореть ли лампочке".
Подкатегория... Щас мозг лопнет, не могу придумать игру с персонажем, не взаимодействующим с миром. В чем же геймплей? Это команды "почесать нос" и "закурить". Или игра "Вы стоите посреди плоской пустыни, дойдите до края" - и то придется проверять, дошел или нет. Я серьезно. О каких играх Вы говорите?
Цитата:
В чем проблема-то?
В том что такой класс, заменяющий код клавиши на строковую константу из списка путем долгих превращений и рассылки событий, избыточен. Более чем достаточно получить событие "нажали/отжали клавишу" и спросить у модели-"блокнота" его текущее состояние, на основании которого изменить состояние модели мир+персонаж.
Задам Вам Ваш же вопрос - как Вы собираетесь использовать этот класс? Что будет происходить дальше, там где сейчас стоят трейсы типов событий? Можно на варианте с одним обработчиком, не важно...
(...Вы просили указать косяк, я высказываю свое мнение...)

Добавлено через 21 минуту
Летающий в пустоте вертолет - принято. Хороший пример. А игра в чем?
__________________
Reality.getBounds(this);

Старый 01.05.2010, 19:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 29  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Как оказалось, моё мнение разделяют и другие люди, это радует.
По поводу контроллеров клавиатуры - говорите "контроллер сигналов клавиатуры", тогда это будет уже более ясно. Лично мне кажется, что "контроллер" звучит круто, поэтому многие так обзывают свои классы. Но это бред, класс можно называть и матерными словами, лишь бы работало.

По теме: есть кнопки на клаве, которые игрок нажимает. Их слушает главный герой, всё ок, но нет взаимодействия с миром. Но если мир тоже будет их слушать - будет всё ок. Персонаж и мир не будут связаны, но их логика будет идти 2 раза. То есть мир не спросит у персонажа - "как дела?", а мир сам просчитает, как дела у персонажа и примет решение. Лично я считаю что это чертовски неудобно и глупо. Но у автора есть своё мнение и право идти так, как хочет он - это хорошо, о сложностях в дальнейшем его предупредили. Но когда каждый объект в мире должен слушать клавиатуру и она не реализует статичные методы, т.е. каждому объекту надо передавать ссылку на "контроллер" клавиатуры - это уже откровенная глупость. Ну, автор не хочет подумать на берегу - все начинали с малого, на ошибках учатся, причем тут откровенное желание на них поучится. Я и слился.
А так да, подпишусь под каждым словом Wolsh`а.

Старый 23.05.2010, 04:28
Холод вне форума Посмотреть профиль Отправить личное сообщение для Холод Найти все сообщения от Холод
  № 30  
Ответить с цитированием
Холод

Регистрация: May 2010
Сообщений: 3
Вот уж не знаю, сюда ли этот вопрос:

Конкретная ситуация - скрипт нормально обрабатывает нажатия всех кнопок (влево, вверх, вправо, вниз), нормально отрабатывает нажатие двух одновременно кнопок, но, при, например, зажатых влево и вверх не хочет больше принимать никаких кнопок. Например: при движении вправо вверх пробелом можно стрелять, а влево вверх не получается. Как с этим бороться?

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

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

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


 


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


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