Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Хорошее MVC (http://www.flasher.ru/forum/showthread.php?t=138349)

Dukobpa3 17.01.2012 02:42

Код AS3:

model.addEventListener(ModelEvent.UNIT_ACTIVATED, activateUnit);
private function activateUnit(e:ModelEvent):void {
      trace(e.activeUnit);
}

Это только одно событие получается. Юнита активировали. А будет еще пачка, юнит походил, юнит атакует, юнит копает, юнит в доме.

И это в итоге может разрастись на пачку всего остального.
К тому же если юнита активировали то подсветится те клетки куда можно пройти, а юнит не может ходить по камням к примеру. Так вот в каждом таком событии передавать всю карту нецелесообразно, нужно чтоб вью сама полезла в модель и прочитала параметры карты и потом нарисовала подсвеченные клетки.

HardCoder 17.01.2012 02:46

Цитата:

Сообщение от Dukobpa3 (Сообщение 1057394)
Так вот в каждом таком событии передавать всю карту нецелесообразно, нужно чтоб вью сама полезла в модель и прочитала параметры карты и потом нарисовала подсвеченные клетки.

То что я и хотел узнать!!!

fish_r 17.01.2012 03:23

Цитата:

Сообщение от Dukobpa3 (Сообщение 1057378)
@fish_r - Слушай что тебе старшие говорят ;-Р

Так уж получилось, что я старше вас обоих и не исключено, что вместе взятых.
Но, вероятно мы должны сказать спасибо вашим родителям за ваше воспитание.

Dukobpa3 17.01.2012 03:24

Никогда не оценивал возраст по годам, сорри.

fish_r 17.01.2012 03:26

Цитата:

Сообщение от Zebestov (Сообщение 1057367)
Ну и на этот вопрос тебе Dukobpa3 уже давал ответ, с которым я согласен

Юнит — не кнопка. Юнит — фигурант логики приложения. Кнопка — кликабельный кусок монитора.

А теперь предположим, что вы делаете польз. интерфейс с помощью которого несколько пользователей, одновременно управляют неким процессом и местоположение кнопок определяет последовательность
каких либо действий. Т.е. если один изменил местоположение кнопки, то и у других оно должно изменится.
Являются ли в этом случае координаты кнопки частью модели?

Добавлено через 1 минуту
Цитата:

Сообщение от Dukobpa3 (Сообщение 1057401)
Никогда не оценивал возраст по годам, сорри.

Блин, а как его ещё можно оценивать? Вы просто непрерывно открываете для меня "новые горизонты".

Dukobpa3 17.01.2012 03:28

Цитата:

Т.е. если один изменил местоположение кнопки, то и у других оно должно изменится.
ключевые слова вот.

Да, тогда координаты или какое-то представление координат должно быть в модели (возможно даже не двумерное, а линейное "что за чем в каком порядке").

Добавлено через 58 секунд
Цитата:

Блин, а как его ещё можно оценивать? Вы просто непрерывно открываете для меня "новые горизонты".
Сложный философский вопрос, не для этого форума.
Изначально про возраст как бы шутка была. Но если уж так серьезно то так.

fish_r 17.01.2012 22:32

Вадим не отписался, предположу, что он и в этом, вашем ответе с вами солидарен.
Так вот:

Цитата:

Да, тогда координаты или какое-то представление координат должно быть в модели (возможно даже не двумерное, а линейное "что за чем в каком порядке").
Не "координаты", и не "какое то представление", а именно измененный порядок действий должен быть получен моделью (интерпретированный контроллером), и вью интерфейса "на другой стороне", который возможно и выглядит-то иначе (ну скажем оппонент - араб, или японец и т.д.), интерпретирует полученные данные (а именно порядок действий) в нужную последовательность расположения виз. элементов.

Таким образом мы и получаем правильное взаимодействие элементов: вью интерпретирует данные модели,
контроллер интерпретирует данные вью - получаем обособленность, независимость модели от представления (но не обратную, что MVC и не предусматривает).

И, вот что... устал я что то от этого, с вашего позволения закроем прения по этому вопросу.

"Имеющий уши да услышит, имеющий глаза да увидит..."

Dukobpa3 17.01.2012 23:47

Ни к чему ведь прения.
Вы опять же привели один из частных случаев.

Одни и те же шахматы можно сделать как с сохранением истории - тогда ключевым моментом будет порядок действий. А можно хранить только текущее состояние. Тогда достаточно будет только координат фигур на доске.

Оба варианта имеют место быть и на определенном уровне абстракции абсолютно идентичны.

fish_r 18.01.2012 00:01

Прение - это спор. В этом нет ничего страшного )

Ну, ладно. А почему именно координаты вам нужно сохранять (про шахматы)? Можно ведь сохранить в
двухмерном массиве вида x\y, где каждый эл-т это клетка шах. поля. Так нельзя сделать?

Конечно, в случае с юнитами всё может быть намного сложнее, но MVC и не гарантирует простоты, он гарантирует лишь одно - независимость представления от логики.

Dukobpa3 18.01.2012 00:05

Цитата:

двухмерном массиве вида x\y, где каждый эл-т это клетка шах. поля. Так нельзя сделать?
Да как угодно можно. Главное принципы соблюсти.
Касательно шахмат зачем мне целый двумерный массив из 64-х клеток если я обойдусь одномерным массив на 32 значения. Экономия на спичках, в данном конкретном случае, но всё же. И даже если это будет не 8х8, а некое произвольное поле то вьюхе будет достаочно узнать размерность(два значения) и опять же один одномерный массив юнитов.
И разговор наш начинался с карты и юнитов. Тут абсолютно та же ситуация - координаты минимальное чем можно обойтись для воссоздания текущей ситуации.
А вот например есть игра Торибаш. Физика трехмерная, две регдольных куклы файтинги устраивают. Так вот тут нужен именно порядок действий с самого начала боя, так как тут играет роль физика, и очень влияет на исход боя не только текущее положение, а еще и инерция которую мы получили в предыдущих ходах.

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


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

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