Четверг, 05 Декабря 2024, 05:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
ReanДата: Воскресенье, 04 Декабря 2016, 02:32 | Сообщение # 121 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael,
Цитата aedginvael ()
Может у тебя есть чего почитать для обучения?

К сожалению, всё что я могу порекомендовать - написано на английском. Самый полезный ресурс - это, безусловно, официальная документация. Редко бывает, когда кто-то может объяснить лучше создателя. Ещё, вроде как, есть какие-то книги по GM, но я не уверен переведены ли они на русский и есть ли подобная литература для актуальной версии студии. В любом случае, ковыряйте проекты, сами создавайте небольшие игры, задавайте вопросы, благо комьюнити здесь отзывчивое, в основном пытаются помочь ;) Ну и конечно, потихоньку "грызите" официальный мануал. Хоть он и на английском, но лучше вряд ли кто-то расскажет. Остальное - это уже игровая логика, механика и соответствующие алгоритмы, которые в основном не зависят от среды разработки.
Цитата aedginvael ()
но как взять координаты относительно окна - не нашел.

Здесь, на странице мануала, есть картинка, которая примерно объясняет функции положения и размера окна.
Стоит помнить, что отсчёт координат ведётся от верхнего левого угла. Соответственно, максимальный X в оконных координатах (правая граница окна) будет - window_get_width(), максимальный Y (нижняя граница окна) - window_get_height(). Если мы хотим отобразить что-то в DrawGUI, то нам необходимо уложиться в эти границы (от 0 до window_get_width() для X, и от 0 до window_get_height() для Y).

ProsstoBRO, отлично :)
ReanДата: Воскресенье, 04 Декабря 2016, 01:58 | Сообщение # 122 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
ProsstoBRO,
Цитата ProsstoBRO ()
А что это за маска, как она и где работает?

Маска спрайта для коллизии: открываешь окно спрайта, там группа Collision Checking и кнопочка Modify Mask. По нажатию кнопки откроется ещё одно окно - окно настройки маски. В нём необходимо поработать с двумя группами: Bounding Box и Shape. В принципе, там всё очевидно. Попробуй настроить маску так, чтобы она попадала лишь на тот участок тайла, который не перекрывается (который всегда сверху).
Цитата ProsstoBRO ()
Плюсик уже кинул))

;)


Сообщение отредактировал Rean - Воскресенье, 04 Декабря 2016, 01:59
ReanДата: Воскресенье, 04 Декабря 2016, 01:49 | Сообщение # 123 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
ProsstoBRO, а ты маску спрайта настраивал?
ReanДата: Воскресенье, 04 Декабря 2016, 01:42 | Сообщение # 124 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
ProsstoBRO, честно говоря, этого стоило ожидать. Всё зависело от порядка создания экземпляров тайлов. В таком случае, надо "привязываться" либо к глубине (depth), либо к координате Y. У тебя ведь "нахлёст" происходит, грубо говоря, по высоте? То есть, срабатывал нижний, на который нажимали, и верхний?
ReanДата: Воскресенье, 04 Декабря 2016, 01:11 | Сообщение # 125 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
ProsstoBRO, в общем, идея такая: также, в обработчике нажатия мыши, нам необходимо проверить условную переменную "global.selected". Если она false, то продолжаем выполнять функцию, иначе - выходим.
Код

if (global.selected)
    exit;

global.selected = true;

// Дальше идёт твой код
...

В событии Left Released нам нужно сделать только одну операцию - вернуть global.selected значение false;
Код

//Left released
global.selected = false;

// Далее, твой код, если есть
...

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

Добавлено: я думаю и так понятно, но на всякий случай упомяну - global.selected необходимо объявить заранее, при создании объекта, либо комнаты, либо менеджера, в общем, в месте, где у тебя происходит объявление всех глобальных переменных.


Сообщение отредактировал Rean - Воскресенье, 04 Декабря 2016, 01:14
ReanДата: Суббота, 03 Декабря 2016, 23:24 | Сообщение # 126 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
ProsstoBRO, в каком месте и каким образом обрабатываешь нажатие? У какого объекта?
ReanДата: Суббота, 03 Декабря 2016, 02:41 | Сообщение # 127 | Тема: Изменение размера спрайта без потери качества
участник
Сейчас нет на сайте
nike070888,
Первый вариант: изменить спрайт в другом графическом редакторе, с которым умеешь работать.
Второй вариант: там же, в редакторе спрайтов, сперва изменить размер холста на требуемую величину (Transform -> Resize Canvas...), а затем и сам спрайт через масштабирование.
Третий вариант: изменить непосредственно в коде с помощью параметра image_xscale и image_yscale - масштаб по ширине и высоте соответственно.
Например:
Код
image_xscale = 1.5; // увеличит ширину спрайта в полтора раза
ReanДата: Суббота, 03 Декабря 2016, 01:31 | Сообщение # 128 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael, скаченный файл надо импортировать в проекты (File -> Import project...)
Интерфейс я бы всё же рекомендовал рисовать в DrawGUI - потом меньше хлопот будет (по типу тех, что интерфейс отображается в двух видах). Суть в том, что в событии Draw ты рисуешь не в каком-то определённом виде, а непосредственно в комнате. Виды - отображают тот или иной участок комнаты с заданным масштабом. Когда ты рисуешь GUI в простом Draw событии, то ты рисуешь его в комнате, а потому он отобразиться во всех видах, которые буду смотреть на этот участок. Поэтому интерфейсы рисуем только в DrawGUI. Можем расположить элементы GUI за пределами комнаты (если по каким-то причинам необходимо кинуть их в комнату на этапе проектирования), а уже в методе DrawGUI рисуем с необходимым сдвигом. Так как процесс рисования в DrawGUI происходит по оконным координатам, то динамически менять положение GUI элементов нет необходимости.
В примере, скинутом мной выше, как раз и показывается один из вариантов коллизии с одним типом объектов (допустим, родитель). Объектов может быть несколько. За один степ удастся проверить все объекты, с которыми происходит коллизия.
ReanДата: Пятница, 02 Декабря 2016, 22:51 | Сообщение # 129 | Тема: Изменение размера спрайта без потери качества
участник
Сейчас нет на сайте
nike070888, каким образом увеличиваешь масштаб?
ReanДата: Пятница, 02 Декабря 2016, 16:43 | Сообщение # 130 | Тема: Дистанция от экземпляра объекта
участник
Сейчас нет на сайте
geney, falcoware, ага, и обязательно нужно программировать это в машинном коде. И вот когда ты уже постигнешь боль, с чистой совестью сможешь заглянуть в справку и увидеть функцию distance_to_object(), которой пользуются простые смертные.
ReanДата: Четверг, 01 Декабря 2016, 21:44 | Сообщение # 131 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael, вариантов много. Один из:
1. Создать функцию, которая будет перебирать все экземпляры определённого объекта и проверять их на коллизию с необходимой областью. Формирует из них массив и уже с этим массивом мы делаем всё что нам хочется. Ещё один вариант:
Создать объект с прозрачным спрайтом (или спрайтом отображающим нашу область), сделать у него маску (круглую, квадратную, в общем, какую нужно) - простой объект, который будет отвечать за нашу зону видимости. Отключим его отображение (Visible = false) и будем проверять его на коллизию со всеми необходимыми нам объектами. В событии коллизии мы может напрямую обращаться к тому или иному экземпляру, проверяя его свойства и т.д. Главное, чтобы объект-зона всегда совпадал с центром станции/корабля и имел на него ссылку (чтобы выполнять необходимые изменения). Возможно, не самый быстрый, но вполне наглядный и удобный при использовании.
2. Если орудия будут стрелять в одно время только по одному противнику, то лучше сделать функцию поиска-определения только для станции (а она уже будет напрямую связана с орудиями)
3. Если рисовать в методе Draw, то надо взаимодействовать с x и y координатами вида (view_xview, view_yview). Для GUI же лучше использовать события DrawGUI - там будут использованы координаты окна.

Добавлено: вот, набросал пример по первому пункту. CheckCollision.gmz
Добавлено 2: поправил ссылку


Сообщение отредактировал Rean - Пятница, 02 Декабря 2016, 00:55
ReanДата: Четверг, 01 Декабря 2016, 16:43 | Сообщение # 132 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael,
Цитата
Подскажите, что я делаю не так?
Код
  id_obj=collision_circle(x,y,500,all,0,1);
  if id_obj >0
  {
  if id_obj.friend = 3
  {
  sos = true;
  }
  if id_obj.friend = 1
  sos = false;
  }


Во-первых, collision_circle всегда будет возвращать только один instance. И вполне возможно, что это будет один и тот же instance. Если, к примеру, пушка в одно время может иметь только одну цель - то, в принципе, это может сработать. А если надо проверить всех, кто находится в круге - здесь ждёт неудача. К тому же стоит иметь ввиду, что collision_circle не всегда возвращает ближайший объект, а лишь объект который попадает в зону коллизии.
Во-вторых, более читаемый код выглядит с использованием конструкции switch:
Код

...
if (id_obj != noone)
    switch (id_obj.friend) {
        case 0: тра-та-та; break;
        case 1: sos = false; break;
        case 3: sos = true; break;
}

Можно, конечно, ещё компактней, но это для тривиальных случаев:
Код

sos = (id_obj != noone) and (id_obj.friend == 3)

В-третьих, в событии Step орудия, ты в начале каждый раз обнуляешь индекс, а потом пытаешься сделать следующий (или предыдущий кадр), но в следующем степе у тебя всё будет заново (нулевой кадр +- 1). Таким образом анимация никогда не проиграется и всегда будет показывать кадры 0, 1.
Думаю, перечисленные выше причины - краеугольный камень проблемы. Решив их, ситуация должна более-менее проясниться.

P.S. Все три конструкции (if distance_to_object (target)...), наверное, лучше расположить в конструкции if-else, чтобы лишний раз не дёргать проверки. Хотя, я не знаю задумку, поэтому здесь тяжело что-то советовать.
P.P.S Вместо image_index += 1, я бы всё же предпочёл устанавливать image_speed. Иначе получается жесткая привязка к room_speed. Ну и при потере кадров, будут пролёты анимации.


Сообщение отредактировал Rean - Пятница, 02 Декабря 2016, 00:50
ReanДата: Среда, 30 Ноября 2016, 17:52 | Сообщение # 133 | Тема: Решаем задачи по Construct 2 [вопрос-ответ]
участник
Сейчас нет на сайте
BESS55555,
Цитата BESS55555 ()
Хотя, уже как больше года назад они анонсировали С3, я вот теперь думаю, что это будет?

Честно говоря, ничего не слышал про Construct 3. Вот только сейчас решил загуглить. Пролистав соответствующий сайт (www.construct3.com), как я понял, у них нет каких-то конкретных идей и наработок. Только так: ну, типа, мультиплатформенность, поддержка на разных языках по всему свету, обратная совместимость с Construct 2 и "And lots more". Больше похоже на то, что они просто домен заняли, чтобы его не увели :) А по итогу получится что-то типа GameMaker Studio 2. Поживём - увидим.

На счёт NWJS и версий ничего конкретного сказать не могу, потому как из-за специфической направленности Construct'а на HTML5, чаще приходится пользоваться другими инструментами.
ReanДата: Среда, 30 Ноября 2016, 13:24 | Сообщение # 134 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael, посмотри в сторону функции draw_sprite_ext. Один из аргументов - rot, отвечает за угл поворота спрайта.

Сообщение отредактировал Rean - Среда, 30 Ноября 2016, 13:45
ReanДата: Среда, 30 Ноября 2016, 00:53 | Сообщение # 135 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
1) Для кода лучше использовать специальные теги code.
2, 3, 4 - вот с этого и надо начинать. Чем больше информации, тем больше шансов, что кто-то сможет помочь. А иначе приходится угадывать, что там у кого случилось.

Такой момент: в каком событии код? Всё рисование должно происходить в Draw Event (Draw Begin, Draw End, etc)
И правильно я понимаю, что больше в комнате нет никаких других объектов, фона и прочего? Views не задействованы?


Сообщение отредактировал Rean - Среда, 30 Ноября 2016, 01:01
ReanДата: Вторник, 29 Ноября 2016, 22:38 | Сообщение # 136 | Тема: Вопрос - Ответ (Game Maker)
участник
Сейчас нет на сайте
aedginvael, не лучшая идея менять значение переменных в Draw Events. Точка с запятой после D не нужна. Объект имеет экземпляры в комнате и активный параметр Visible? Данный код говорит, что отрисовывать объект (сам объект и дополнительный спрайт) необходимо ТОЛЬКО при нажатии D. Всё остальное время ничего отрисовываться не будет.

Добавлено:
а, ну и самое главное - ты рисуешь второй спрайт поверх первого по тем же координатам.


Сообщение отредактировал Rean - Вторник, 29 Ноября 2016, 22:47
ReanДата: Суббота, 26 Ноября 2016, 22:12 | Сообщение # 137 | Тема: Как запустить игру оффлайн!
участник
Сейчас нет на сайте
Цитата musicfuns ()
Написать свой сервер можно сказать практически невозможно. Да, как бы, запускай игру и лови все запросы которая делает игра, а потом пили сервер, который будет отвечать на конкретные запросы. Но это было бы реальнее, если бы ты перехватывал и сохранял запросы и ответы, которые делала и получала игра будучи рабочей

После прочтения этих строк, с ностальгией вспомнились времена MaNGOS'а и халявных WoW серверов. Различные рейты, неработающие боссы, каждую неделю новые квесты, обилие багов и лагов... Эхх :)
ReanДата: Суббота, 26 Ноября 2016, 22:05 | Сообщение # 138 | Тема: .net Что это, и так ли это страшно?
участник
Сейчас нет на сайте
Цитата blackcatkpi ()
Насколько я понимаю .net - набор библиотек для С#.

Это не только набор библиотек, это и перевод в промежуточный CLI, а также интерпретатор и JIT-компилятор в CLR. Всё это есть ничто иное, как прямой ответ платформе Java (с её JVM).
Цитата blackcatkpi ()
На самом деле С# аналог джавы, а не .Net

Смотря что подразумевать под Java. В данном контексте - платформа .NET и платформа Java - всё верно.

В своём исходном виде C# и .NET Framework нераздельны. Программируя на C#, вы программируете в среде .NET.
ReanДата: Суббота, 26 Ноября 2016, 13:46 | Сообщение # 139 | Тема: Как измерить, много ли это займёт пространства в сохранялке?
участник
Сейчас нет на сайте
alexsilent, строка значения в реестре Windows может содержать не более 16383 символов (если тип строки REG_QWORD, 64-бит, то получается как раз 1 мегабайт). Но мне кажется, это не самый оптимальный вариант. А если решишь портировать игру на другие устройства, то и там могут вылезти какие-нибудь ограничения. Как вариант: пересмотреть способ и структуру хранения данных перков. Может не надо хранить все, а только те которые имеются? Подумай о том, как бы упростить хранение данных, есть ли какие-нибудь зависимости и т.д. В крайнем случае, конечно, можно и так оставить или использовать запись в файл.
ReanДата: Пятница, 25 Ноября 2016, 00:07 | Сообщение # 140 | Тема: Как измерить, много ли это займёт пространства в сохранялке?
участник
Сейчас нет на сайте
Присоединяясь к высказываниям выше, добавлю, что если уж сильно хочется, то в C# есть такое пространство:
Код
using System.Text;

В котором находится класс StringBuilder. Вот пример использования:
Код

    string test = "12345";    // Исходная строка

    void Start () {

        StringBuilder temp = new StringBuilder(test);
        temp[2] = '!';
        test = temp.ToString();  // Результирующая строка
        Debug.Log(test);
    }
// Результат: 12!45

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


Сообщение отредактировал Rean - Пятница, 25 Ноября 2016, 00:08
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг