Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 08:53   #61
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

1. Как я понимаю, появился запрет на постройку орудий, когда на поле есть хотя бы один враг. Это не дело ( Во всех играх типа Tower Defence строить можно в любое время, если у тебя есть деньги. Это сделано, чтобы пушка не стреляла по врагам, когда ее ещё и не поставили? ))) Лучше ввести какой-нибудь флаг у пушки типа unit_state = (usActive, usDeactivated).
2. После перемещения / Удаления орудия WorldState нужно скидывать в wsFree

Цитата:
Да вроде ничего особо не делаю. А что не понятно? Или что-то не получается?
Иногда при создании юнита игрушка схлопывается с критом. Вероятно, похожая проблема с врагами (указатель ссылается на какой-то мусор). Но это только предположение.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?

Последний раз редактировалось Wicort; 06.07.2011 в 09:57.
Wicort вне форума Ответить с цитированием
Старый 06.07.2011, 14:02   #62
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Теперь работает. На будующее лучше не использовать нестандартные разрешения. Список разрешений поддерживаемых монитором можно получить через zglPResolutionList.
Вадим Буренков вне форума Ответить с цитированием
Старый 07.07.2011, 00:47   #63
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

2Wicort:
Нет, запрет не из-за отсутствия врагов. Просто обычно, у тебя есть время между волнами, в течение которого ты можешь строится... Во время волны, обычно, только наблюдаешь. В принципе, если это убрать (флаг запрета), то будет даже проще.

Цитата:
После перемещения / Удаления орудия WorldState нужно скидывать в wsFree
Хм, а мне казалось логичным не щелкать каждый раз на кнопку, чтоб передвинуть несколько пушек... Я вообще думаю сделать автоматическое состояние. то есть что-то типа такого:
Если просто нажал на пушку, то выводится её состояние (возможность прокачки и т.п.). Если потащил её, то переместилась. По поводу возможности поворачивать: вообще нужно это?
Если какая-либо пушка выделена, и нажали на кнопочку, например) "Del", то пушка удалилась.
Ну а создание оставить как есть. Или, нажимаешь на кнопку нужного объекта (как у вас реализовано) и, с нажатой кнопкой, перетаскиваешь курсор куда нужно. При отпускании создастся объект в позиции. Далее можно заставить его поворачиваться за курсором, пока не будет сделан ещё один клик. Вот такой вариант ещё есть.

Цитата:
Иногда при создании юнита игрушка схлопывается с критом
А моя реализация тоже падает? Или вы это исключительно про свою?

2Вадим Буренков:
О, спасибо. А то я бы в WinAPI полез. Буду ковырять и изучать.

2All:
Подскажите, пожалуйста, на счёт радио кнопок (TRadioButton). Как их лучше реализовать. У меня пока такие мысли: Сделать у держателя (можно или реализовать в самой панели, или сделать модифицированную, как TRadioGroup) метод SetRadioGroupState(GroupIndex; Sender), где индекс будет указывать группу кнопок, к коротым нужно будет применить событие, а Sender нужен для того, чтобы его установить в True, а остальных в False.
Как вам такая реализация?
Format C: вне форума Ответить с цитированием
Старый 07.07.2011, 09:17   #64
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

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

В основном про wsFree я написал как раз из-за удаления пушки. Просто удалил одну пушку, потом решил переместить другую, а она удалилась. Реализация с выделением орудия - то, что нужно. Насчет поворотов - не знаю... не уверен. Возможно и не нужны.

По радио-кнопкам.
Я бы сделал так: создал класс TRadioGroup, внутри которого располагаются TRadioButton'ы.
У TRadioGroup добавил бы свойства GroupIndex, ItemIndex. У TRadioButton - GroupIndex, Index.
Всё, что находится внутри одной радио-группы - это одна группа, в которой может быть только один выбранный элемент.
Т.е. у радиогруппы и у всех находящихся в ней кнопок одинаковый GroupIndex. В свойстве ItemIndex группы содержится Index выбранной кнопки.
Соответственно, при клике по радио-кнопке определяем родителя по GroupIndex и проставляем ItemIndex.
При отрисовке если TRadioButton.Index = TRadioGroup.ItemIndex, то опция выбрана, совершаем нужные действия.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 11.07.2011, 09:27   #65
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

Вот доработанный вариант.
Изменил способ создания/манипулирования объектов.
Так же ввёл активность объектов, теперь при перемещении пушка деактивируется и не стреляет, впрочем, у ракетницы ракеты продолжают летать (если они успели вылететь).

Так же хочу попросить совета:
Есть мысли сделать несколько слоёв, для вывода графики.
Объясню:
Сейчас все объекты рисуют себя в порядке очереди и полностью, из-за чего бывает, что тень или радиус обстрела накладывается на другие объекты, хотя должен быть явно под ними.
Хочу изменить метод рисования примерно таким образом:
Procedure Draw(Layer: Byte);

Где Layer - слой, который нужно нарисовать, а в самой процедуре поставить Case Layer Of ...

А в контейнере (TWorld) добавить цикл ещё и по слоям:
Код:
For L:=0 To LayerCount-1 Do
  Что-то.Draw(L);


Плюс, можно сделать разделение слоёв, зависящее от типа объекта. То есть объекты (пушки, враги) всегда будут рисоватся в самом низу (первые), эффекты (взрывы, дым) в середине, а контролы последними (поверх всех).
Да и ограничить число слоёв, для объектов и контролов пяти хватит, а для эффектов не вижу смысла, если их будет больше двух.
В связи с этим, объявить константы:
Код:
Const
  ObjLayerCount = 5;
  ObjLayerBase = 0;

  ObjLayer1 = ObjLayerBase + 0;
  ObjLayer2 = ObjLayerBase + 1;
  ObjLayer3 = ObjLayerBase + 2;
  ObjLayer4 = ObjLayerBase + 3;
  ObjLayer5 = ObjLayerBase + 4;


  ToolLayerCount = 2;
  ToolLayerBase = 10;

  ToolLayer1 = ToolLayerBase + 0;
  ToolLayer2 = ToolLayerBase + 1;


  CtrlLayerCount = 5;
  CtrlLayerBase = 20;

  CtrlLayer1 = CtrlLayerBase + 0;
  CtrlLayer2 = CtrlLayerBase + 1;
  CtrlLayer3 = CtrlLayerBase + 2;
  CtrlLayer4 = CtrlLayerBase + 3;
  CtrlLayer5 = CtrlLayerBase + 4;
И делать Case в объекта уже по ним.
А в контейнере делать цикл по слоям для объектов, затем для эффектов и контролов.

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


Теперь по поводу создания/перемещения.
Для создания нужно нажать на кнопку нужного орудия и, не отпуская кнопки, перетащить его на нужное место.
Для перемещения, так же нажать, переместить, отпустить. Для поворота тоже самое, только правой кнопкой.
Для удаления перетащить объект на панель внизу.

Удаление планировал сделать по другому, но столкнулся с тем, что если нажать на кнопку создания и отпустить, то объект останется под панелькой и с ним уже ничего не сделаешь, хоть он и останется полностью работоспособным. Поэтому воспользовался данным обстоятельством, чтоб их можно было удалять.

Перемещение врагов рассматривайте как финт =) Позже исправлю.


Да, вспомнил, что можно сделать рендер в текстуру. Хотел использовать это для фона. Один раз отрисовать вон, а потом выводить его как целостную текстуру. Имеет ли смысл это делать? Боюсь, что проблема возникнет, если размер экрана будет больше, чем размер спрайта, который поддерживает видеокарта.
Вложения
Тип файла: rar Attack_src.rar (27.9 Кб, 18 просмотров)
Тип файла: rar Attack_exe.rar (949.3 Кб, 34 просмотров)
Format C: вне форума Ответить с цитированием
Старый 11.07.2011, 15:25   #66
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

почему, если долбить мышкой по заголовку формы, дым от ракет прерывается? ))
а игруха классная +
xrob вне форума Ответить с цитированием
Старый 11.07.2011, 18:30   #67
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

потому что в этот момент происходит кратковременное подвисание и не отрабатывает отрисовка. В результате, когда снова начинается прорисовывание, ракета уже в другом месте.
Вывод: не надо долбить мышкой по заголовку формы ))
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 11.07.2011, 21:45   #68
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

2xrob:
Да и заголовка в скором времени не будет.


2All:
В связи с этим вопрос:
Как лучше сделать само изменение разрешения? Не установку режима (800х600, 1024х768), а пропорциональное изменение размеров, чтоб у тех, у кого разрешение больше не было преимуществ (в плане игровой динамики; то, что объектам будет больше пространства и т.п.).

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

Так же интересует, как лучше сделать главное меню, меню игры?
Format C: вне форума Ответить с цитированием
Старый 11.07.2011, 23:16   #69
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Good, but simple example of the TD game here: http://ptdef.com/
akasex вне форума Ответить с цитированием
Старый 11.07.2011, 23:38   #70
Format C:
Пользователь
 
Регистрация: 11.03.2007
Сообщений: 92
По умолчанию

2akasex:
Thank you for example, I will think it later
Format C: вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
разработка игры "Реверси". Имеется код этой игры на С++ CD-RW Помощь студентам 0 28.03.2010 00:13
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
На чем пишутся стратегии типа "Казаков" и "Эпохи империи" Tayfun Свободное общение 3 26.06.2007 20:27