Четверг, 18 Апреля 2024, 20:21

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Художник пытается освоить GML (задаю вопросы по всем непоняткам)
Художник пытается освоить GML
FerrumelДата: Вторник, 22 Марта 2011, 19:59 | Сообщение # 121
почти ветеран
Сейчас нет на сайте
LunarPixel, Ага этого сайтика я еще не видел. Изучу хорошенько.
Quote
Информации, больше чем в справке, я не встречал.

Где то видел подробные инструкции но забыл, теперь головой в стенку бьюсь. angry
думал может кто напомнит ссылку.
Quote
Что имеется в виду под "использовать к одному объекту несколько стрипов"?!

Сменное оружие, доспехи, допустим слегка анимированные
Quote
Просто может, как художнику, тебе проще будет нарисовать анимацию покадрово вряд и сохранить в один фаил,

Мне это действительно проще.


все серо и пусто
LunarPixelДата: Вторник, 22 Марта 2011, 20:13 | Сообщение # 122
старожил
Сейчас нет на сайте
Quote (Ferrumel)
Сменное оружие, доспехи, допустим слегка анимированные

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

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


Robin_LocksleyДата: Вторник, 22 Марта 2011, 20:18 | Сообщение # 123
постоянный участник
Сейчас нет на сайте
Quote (Ferrumel)
листы стрипов, в каком они должны быть формате, с прозрачным фоном или нет,

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

Quote (Ferrumel)
каким образом осуществляется выдирка изображений в код

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

Quote (Ferrumel)
каким образом собирается на основе стрипа анимация,

Очень просто. Нужная часть изображения вырезается программой и сохраняется в отдельное изображение-кадр. Эти кадры проигрываются последовательно. Номер кадра всегда начинается с 0. Т.е. первый кадр 0, второй - 1 и т.д. Размер кадра определяется настройками стрипа в окне разбивки на кадры.

Quote (Ferrumel)
какие тонкости при это необходимо учитывать, какую нагрузку в конечном итоге играет лист на компьютер в отличие если использовать отдельные спрайты и анимированные спрайты.

Не уверен, но более чем вероятно, что нагрузка не возрастает вообще. Считывание переменных индекса изображения происходит и в случае со спрайтом состоящим из одного кадра и из нескольких. Учитывать думаю нужно только кратность кадров анимации, потому как возможно "проседание" анимации.
Вот простой пример:

Скорость комнаты - 100 шагов.
Кадров анимации - 10.
Каждый кадр анимации проигрывается раз в 10 шагов. Идеально, потому как нет рывков.

Скорость комнаты 100 шагов.
Кадров анимации - 7.
Каждый кадр анимации проигрывается раз в 14 шагов, при этом один кадр анимации проигрывается всего 2 шага. Получается проседание в один кадр анимации. На более низких скоростях рывки будут более заметны. Также нужно быть более внимательным к image_speed, так как она влияет на количество шагов в которых будет показан один кадр анимации.

Quote (Ferrumel)
Можно ли использовать к одному объекту несколько стрипов, можно ли использовать на несколько объектов один стрип

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

Quote (Ferrumel)
целесообразность объеденения изображения в стрип, если его можно использовать как отдельный анимированный спрайт,

Стрип упрощает работу. Вместо 20-ти отдельных кадров ты загружаешь один. И оперируешь тоже одним, что намного удобнее чем делать то же самое для 20. Как думаешь, это целесообразно? smile

Quote (Ferrumel)
Я спрашиваю, есть ли где почитать об этом? Или шишки себе на примитивных вещах набивать? Тоесть есть ли где нибудь объедененная информация?

Я такой не нашел, да особо и не искал. Все на своем опыте и своих шишках.

Quote (Ferrumel)
В принципе могу и сам это дело додумать по поводу стрельбы, но хоть намек как это реализовывается таймером каким нибудь?, длинные коды писать не надо, все равно я посмотрю и напишу свой. Если есть где код можно просто ссылкой порадовать.

В общем это выглядит примерно так:
Если количество пуль < длинны очереди --> создать объект пуля. Задержка между выстрелами делается либо таймером, либо циклом (пока нажата клавиша i=0; i<n; i+=1).

Пардоне муа мусье за сумбур, я немного пьян. Надеюсь объяснил достаточно внятно biggrin

Добавлено (22.03.2011, 20:18)
---------------------------------------------

Quote (Ferrumel)
Просто может, как художнику, тебе проще будет нарисовать анимацию покадрово вряд и сохранить в один фаил,

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


Сообщение отредактировал Robin_Locksley - Среда, 23 Марта 2011, 00:13
LunarPixelДата: Вторник, 22 Марта 2011, 20:20 | Сообщение # 124
старожил
Сейчас нет на сайте
Quote (Robin_Locksley)
Из поддерживаемых гм форматов такое может только гиф, а у него проблемы с частичной прозрачностью.

Эм.. какой гиф?! я написал "нарисовать анимацию покадрово в ряд"... wink


Robin_LocksleyДата: Вторник, 22 Марта 2011, 20:28 | Сообщение # 125
постоянный участник
Сейчас нет на сайте
Quote (LunarPixel)
Эм.. какой гиф?! я написал "нарисовать анимацию покадрово в ряд"...

Пардон, мне показалось что ты имел ввиду не стрип а анимированный кадрами файл.
FerrumelДата: Среда, 23 Марта 2011, 15:42 | Сообщение # 126
почти ветеран
Сейчас нет на сайте
Вот такое интересное кино.
Почему такая конструкция не работает и вешает машину?
while not keyboard_check (vk_down) { бла бла бла блаб лаб} Неужто нельзя такую проверку на нажатие выполнять?


все серо и пусто
Robin_LocksleyДата: Среда, 23 Марта 2011, 16:15 | Сообщение # 127
постоянный участник
Сейчас нет на сайте
Quote (Ferrumel)
while not keyboard_check (vk_down) { бла бла бла блаб лаб} Неужто нельзя такую проверку на нажатие выполнять?

Опять циклы. Если тебе нужна проверка на клавишу, используй if условие в степе.
Дело в том, что цикл выполняется пока условие истинно и прекращает выполняться только когда становится ложным. Если ты использовал цикл в степе, то каждый шаг у тебя запускается новый цикл, при том что старый все еще выполняется. В итоге получается практически бесконечное генерирование циклов. Каждый цикл занимает вычислительную мощность системы, следовательно при огромном их количестве ресурсов на обработку всех циклов не хватает, и система виснет.
FerrumelДата: Четверг, 24 Марта 2011, 14:59 | Сообщение # 128
почти ветеран
Сейчас нет на сайте
Robin_Locksley, Ладно, проехали.. Я просто еще не могу въехать в структуру скриптонаписания на гм. Потому накачал себе исходников и сижу смотрю как умные люди делают.

такой вопрос instance_nearest эта функция возвращает идентификатор ближайшего объекта. Вообще вопрос, а в каких случаях эта функция используется?


все серо и пусто
NeZnayuДата: Четверг, 24 Марта 2011, 15:06 | Сообщение # 129
__танцуй!__
Сейчас нет на сайте
Когда нужно сделать что-то с ближайшим экземпляром объекта, например при создании ИИ - чтобы юниты атаковали ближайшие к себе цели и т.п.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
Dva_KotaДата: Пятница, 25 Марта 2011, 16:06 | Сообщение # 130
заслуженный участник
Сейчас нет на сайте
Quote (Robin_Locksley)
Если ты использовал цикл в степе, то каждый шаг у тебя запускается новый цикл, при том что старый все еще выполняется.

А разве следующий шаг не начнет выполняться только после завершения текущего цикла?


Новый пример инвентаря! /20.06.2012/

Energy Wars
Robin_LocksleyДата: Пятница, 25 Марта 2011, 16:36 | Сообщение # 131
постоянный участник
Сейчас нет на сайте
Quote (Dva_Kota)
А разве следующий шаг не начнет выполняться только после завершения текущего цикла?

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


Сообщение отредактировал Robin_Locksley - Пятница, 25 Марта 2011, 16:53
Dva_KotaДата: Пятница, 25 Марта 2011, 16:47 | Сообщение # 132
заслуженный участник
Сейчас нет на сайте
Я хочу сказать что если у него, например, в первом шаге выполняется код:
Code
while not keyboard_check (vk_down) { бла бла бла блаб лаб}

то второй шаг не начнет выполняться пока условие не будет истиной.


Новый пример инвентаря! /20.06.2012/

Energy Wars
Robin_LocksleyДата: Пятница, 25 Марта 2011, 16:51 | Сообщение # 133
постоянный участник
Сейчас нет на сайте
Почему не начинает? Идет проверка, клавиша не нажата (условие для выполнения кода удовлетворено), выполняется код, завершается шаг.
Следующий шаг делает 2 проверки. Из первого шага, и из текущего. Получаем во втором шаге 2 цикла.
LunarPixelДата: Пятница, 25 Марта 2011, 16:56 | Сообщение # 134
старожил
Сейчас нет на сайте
Robin_Locksley, к следующему шагу он должен перейти, только когда выйдет из цикла. А выйдет из цикла он тогда, когда клавиша нажата.
Когда клавиша не нажата, выполняется код, а затем повторяется выполнение цикла в том же шаге.

И вообще представленный код повесит игру, даже если его добавить в create




Сообщение отредактировал LunarPixel - Пятница, 25 Марта 2011, 16:57
Robin_LocksleyДата: Пятница, 25 Марта 2011, 17:06 | Сообщение # 135
постоянный участник
Сейчас нет на сайте
Quote (LunarPixel)
Robin_Locksley, к следующему шагу он должен перейти, только когда выйдет из цикла. А выйдет из цикла он тогда, когда клавиша нажата.
Когда клавиша не нажата, выполняется код, а затем повторяется выполнение цикла в том же шаге.

И вообще представленный код повесит игру, даже если его добавить в create


Давай рассмотрим пример:
і=0
while i<10; i+=1;
В шаге выполняется только один проход цикла:
- Начинается шаг;
- Проверка меньше ли переменная 10-ти;
- Если условие удовлетворено (переменная меньше 10-ти) к значению прибавляется единица;
- Завершается шаг;
В следующий шаг выполняется повторный проход цикла, потому как условие для завершения цикла не удовлетворено (переменная не больше или равно 10-ти):
- Начинается шаг;
- Проверка меньше ли переменная 10-ти;
- Если условие удовлетворено (переменная меньше 10-ти) к значению прибавляется единица;
- Завершается шаг;
В следующих шагах продолжается то же самое до тех пор пока переменная не станет 10 или больше.
LunarPixelДата: Пятница, 25 Марта 2011, 17:11 | Сообщение # 136
старожил
Сейчас нет на сайте
Robin_Locksley, т.е если судить по твоей логике...
Quote (Robin_Locksley)
Следующий шаг делает 2 проверки. Из первого шага, и из текущего.

То while i<10; i+=1; после первой проверки должно уже прибавлять не 1, а 2... т.к. "Следующий шаг делает 2 проверки..."

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




Сообщение отредактировал LunarPixel - Пятница, 25 Марта 2011, 17:12
Dva_KotaДата: Пятница, 25 Марта 2011, 17:16 | Сообщение # 137
заслуженный участник
Сейчас нет на сайте
Robin_Locksley, то что ты написал будет происходить при использовании if

Добавлено (25.03.2011, 17:16)
---------------------------------------------
Игра висит по тому что не начинается выполнение следующего шага (в игре ничего не происходит, игрок и враги не двигаются например).


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Пятница, 25 Марта 2011, 17:17
Robin_LocksleyДата: Пятница, 25 Марта 2011, 17:57 | Сообщение # 138
постоянный участник
Сейчас нет на сайте
Quote (Dva_Kota)
Robin_Locksley, то что ты написал будет происходить при использовании if

При использовании иф действие будет происходить один раз, если это не шаг. В шаге использовать циклы не правильно.

Quote (Dva_Kota)
Игра висит по тому что не начинается выполнение следующего шага (в игре ничего не происходит, игрок и враги не двигаются например).

Как не происходит? Условие удовлетворено? Исполняемый код есть? Как может ничего не происходить? Ты противоречишь логике.

Quote (LunarPixel)
Шаг меняется, когда выполняется весь код, который в нем прописан.
Пока цикл не завершится, код не будет выполнен полностью, а значит шаг не изменится.

Ну так код и выполняется. Разве нет? Цикл не должен завершаться каждый шаг, иначе нет нужды его использовать.
Такой цикл можно просто заменить кодом if i=0 i=10, что абсолютно не правильно по отношению к циклам.
LunarPixelДата: Пятница, 25 Марта 2011, 18:21 | Сообщение # 139
старожил
Сейчас нет на сайте
Quote (Robin_Locksley)
Ну так код и выполняется. Разве нет? Цикл не должен завершаться каждый шаг, иначе нет нужды его использовать.
Такой цикл можно просто заменить кодом if i=0 i=10, что абсолютно не правильно по отношению к циклам.

Код должен не просто выполниться, он должен выйти из цикла.

Грубо говоря:

while not keyboard_check (vk_down)
{ бла бла бла блаб лаб}
end_step

Пока не выйдет из цикла, end_step не сработает, т.е. шаг не закончится и к следующему не перейдет.


Robin_LocksleyДата: Пятница, 25 Марта 2011, 18:34 | Сообщение # 140
постоянный участник
Сейчас нет на сайте
Все, пардон, я понял что к чему. Не было под рукой гм чтобы проверить. Вы все правильно сказали smile
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Художник пытается освоить GML (задаю вопросы по всем непоняткам)
Поиск:

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