RS Game Maker Community
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

 
Расширенный поиск
  Главная  Форум   Вики Блоги FAQ Игры Статьи Примеры Войти Регистрация  
Вики
Все желающие приглашаются редактировать вики. Можете писать о своих (или чужих) играх, размещать туториалы, постить статьи - главное навесить категорию.
Страниц: 1 ... 362 363 364 365 366   Вниз
  Печать  
Ответы@Gmakers.xyz — все вопросы сюда
0 Пользователей и 7 Гостей смотрят эту тему.
deathsoul
дезсоул
Ветеран форума
*****

Репутация: 548
Offline Offline

Награды:
Легенда сайта
Сообщений: 1 853


21 Апрель 2011 в 01:14
Чтобы не было тем с вопросами, которые содержат всего два-три сообщения, все свои вопросы задавайтесь здесь. Если вопрос окажется слишком сложным для общей темы, модераторы всегда могут вынести обсуждение в отдельную тему.
Для этой темы действуют те же правила, что и для всего раздела, так что перед тем, как задать вопрос, обязательно ознакомьтесь с этой темой: «Ознакомьтесь, прежде чем задать вопрос». И не забудьте проверить, нет ли ответа на ваш вопрос в FAQ по Game Maker.
Последнее редактирование: 13 Октябрь 2013 в 19:01 от Огион
 
input.txt
Не очень
Активный участник
**

Репутация: 19
Offline Offline

Сообщений: 145


12.8 Gb

Ответ № 7301 13 Сентябрь 2018 в 20:33
Когда объект находится за границей, outside view выполняется каждый шаг. Причем после события step, так что можно в step выставлять видимость в true, а потом outside view выключит все внешние объекты.

Также условие нахождения в виде проверяется по ограничивающему прямоугольнику (bbox_left, bbox_top, ...). А в случае отсутствия маски – по координатам объекта.
Прикреплённые файлы
* outside_view.gmk (9.53 Кб - загружено 34 раз.)
Последнее редактирование: 13 Сентябрь 2018 в 20:43 от input.txt
tolich
to ne lich
Ветеран форума
*****

Репутация: 218
Offline Offline

Сообщений: 1 517


moonlite

Ответ № 7302 14 Сентябрь 2018 в 20:41
Немного не так в GMS.
This event is triggered when an instance goes outside the room, and is based on a check done against the assigned sprite (and its properties) of the instance, so that even if you have set the image x or y scale to a value other than one, this event will only be triggered when the whole sprite would be out the screen. If the instance has no sprite, then the position of the instance is used and the moment its x or y position is outside of the room then it will trigger the event too. This event is typically used for things like bullets, where they are destroyed once they leave the room so you don't end up with millions of bullets flying away infinitely and causing your game to slow down. Note that this event is only triggered once when the instance leaves the room initially.
Views are normally defined in the room editor and used to show only a small area of a large room at any one time. This event has its own sub event list that is split into two categories (outside view and intersect boundary), with eight different events in each corresponding to the eight available views. These two categories function exactly the same as the respective room events, only taking the boundary of the view as the thing for the instance to check against rather than the room.
Выделенные фрагменты показывают, что в GMS события выхода за пределы вида, как и выхода за пределы комнаты, срабатывает один раз - в момент выхода.

Mr_dd
Новичок


Репутация: 0
Offline Offline

Сообщений: 3

Ответ № 7303 24 Сентябрь 2018 в 21:58
Доброго времени суток. Перейду сразу к делу
Постановка задачи:
Объект движется вверх, затем вниз, скорость разная, но он должен вернуться в ту же точку. Ок, пока всё просто.
Настраиваем объект:

Событие                     Действие

1. Create                   Set Alarm (Alarm 1 to 30)
                            Move Fixed (up, speed = 6)

2. Alarm 0                  Set Alarm (Alarm 1 to 30)
                            Move Fixed (up, speed = 6)

3. Alarm 1                  Set Alarm (Alarm 2 to 30)
                            Move Fixed (down, speed = 3)

4. Alarm 2                  Set Alarm (Alarm 0 to 45)
                            Move Fixed (down, speed = 2)

Путём нехитрых расчетов имеем:
Движение вверх  30x6 = 180
Движение вниз   30х3 + 45х2 = 180

Итого объект совершает небольшой цикл, возвращаясь постоянно в исходную позицию. Да? Как бы не так. Происходит небольшой сдвиг вниз.

Ситуация исправляется лишь в том случае, если добавить лишний степ каждому будильнику. Каждому, кроме последнего, иначе опять сбой.

Собсно, вопросы:
1) Почему так? Куда пропадает по одному степу из каждого будильника??
2) Почему последнему не нужно добавлять?
3) Если пойти другим путём, т.е. оставить все значения такими, как изначально, но у последнего отнять 1 степ - сбой цикла. Опять же, почему?
4) Если скорость в любом направление одинакова (напр. вверх 60 степов, ск-ть 3, вниз 20 степов, ск-ть 3, вниз 40 степов, ск-ть 3), то цикл совершается и с прибавлением степа, и без. Тут я совсем озадачился. Каким образом?

Буду благодарен за разъяснения!
tolich
to ne lich
Ветеран форума
*****

Репутация: 218
Offline Offline

Сообщений: 1 517


moonlite

Ответ № 7304 25 Сентябрь 2018 в 21:18
Если в предыдущем аларме устанавливается следующий аларм, надо к значению добавлять 1 (кроме сброса в 0, понятно). Если подумаешь, поймёшь, почему.

Edit: то же касается и Begin Step.
Последнее редактирование: 25 Сентябрь 2018 в 21:30 от tolich

Mr_dd
Новичок


Репутация: 0
Offline Offline

Сообщений: 3

Ответ № 7305 26 Сентябрь 2018 в 18:50
Я дико извиняюсь, но если бы не пытался ответить сам, меня не угнетал этот вопрос, - я бы не стал искать форум, регистрироваться, читать самые задаваемые вопросы и правила и, наконец, расписывать так подробно ситуацию.
Все мои догадки опровергает вопрос 4) - в нём тоже каждый будильник запускает следующий.
Очень буду признателен, если Вы разжуёте, иначе я уже плохо сплю - всё вспоминаю тихим злым словом будильники (в то время как все нормальные люди делают это с утра)
tolich
to ne lich
Ветеран форума
*****

Репутация: 218
Offline Offline

Сообщений: 1 517


moonlite

Ответ № 7306 29 Сентябрь 2018 в 00:14
Алармы обрабатываются перед событием Step Event последовательно.
Псевдокод:

Для i от 0 до 15
  Если alarm[i]>=0 && есть обработчик события Alarm[i]
    alarm[i]-=1
    Если alarm[i]==0
      вызвать обработчик события Alarm[i]
    Илсе
  Илсе
Ядл

Из этого можно сделать вывод:
- если присвоить значение 1 переменной alarm[2] в обработчике события alarm[1], обработчик будет вызван на этом же шаге,
- если присвоить значение 1 переменной alarm[1] в обработчике события alarm[2], обработчик будет вызван на следующем шаге.

Вывод: при установке значения счётчика с большим номером из будильника с меньшим номером необходимо добавлять 1.

Менее важные выводы:
- Если обработчик события не определён, счётчик не уменьшается. Нужен хотя бы комментарий.
- В конце концов значение счётчика устанавливается в -1.

Mr_dd
Новичок


Репутация: 0
Offline Offline

Сообщений: 3

Ответ № 7307 01 Октябрь 2018 в 19:43
- Если обработчик события не определён, счётчик не уменьшается. Нужен хотя бы комментарий.
Возьму на заметку, не задумывался об этом.

Вопросы 1), 2) уяснил; вопрос 3) был ошибочным; вопрос 4) - неудачные исходные данные.

Благодарю за популярное объяснение!
input.txt
Не очень
Активный участник
**

Репутация: 19
Offline Offline

Сообщений: 145


12.8 Gb

Ответ № 7308 05 Октябрь 2018 в 02:43
Если я правильно понял, нужно чтобы интерфейс всегда был в правильном месте, независимо от того, какая камера используется.

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

У меня получилось добиться этого следующей последовательностью трансформаций:
// Делаем преобразование:
d3d_transform_add_translation(-view_wview[0] / 2, -view_hview[0] / 2, 0);
d3d_transform_add_rotation_z(-view_angle[0]);                             
d3d_transform_add_translation(view_wview[0] / 2, view_hview[0] / 2, 0);   
d3d_transform_add_translation(view_xview[0], view_yview[0], 0);         

// Рисуем как будто в углу комнаты
draw_text(32, 32, "Hud The Game#FPS: " + string(fps));

// Сбрасываем трансформацию
d3d_transform_set_identity();
tolich
to ne lich
Ветеран форума
*****

Репутация: 218
Offline Offline

Сообщений: 1 517


moonlite

Ответ № 7309 05 Октябрь 2018 в 13:17
Звучит как-то сложно. Выглядит тоже, но может мне просто не удалось найти простое решение.
d3d_set_projection_ortho

P.S. Это какбэ первый вопрос темы.

ZCGamer
Активный участник
**

Репутация: 8
Offline Offline

Сообщений: 203


Гроза игростроя!

Ответ № 7310 05 Октябрь 2018 в 13:30
Действительно, вроде помогло. Интерфейс теперь держится на экране. А как быть с самой камерой? Возможно ли их объединить в один "механизм"?
ZCGamer
Активный участник
**

Репутация: 8
Offline Offline

Сообщений: 203


Гроза игростроя!

Ответ № 7311 07 Октябрь 2018 в 23:52
В итоге решения нет?
input.txt
Не очень
Активный участник
**

Репутация: 19
Offline Offline

Сообщений: 145


12.8 Gb

Ответ № 7312 15 Октябрь 2018 в 21:46
Просто непонятно что значит "объединить".
Как ты себе представляешь управление мышкой и положением и углом камеры одновременно? Так-то правильно поставленная задача это половина решения. Ну хоть "хочу камеру как в %game_name%".

Вот например можно назначить ось Х мыши на поворот, а на движение остается только Y. Так что перемещать вид вбок не получится.
Прикреплённые файлы
* camera2d.gmk (9.96 Кб - загружено 22 раз.)
ZCGamer
Активный участник
**

Репутация: 8
Offline Offline

Сообщений: 203


Гроза игростроя!

Ответ № 7313 21 Октябрь 2018 в 00:54
А по какому способу можно реализовать систему настройки игрового персонажа из "комнаты" с настройками? Допустим поменять ему чувствительность вращения, схему управления и др. Я пробовал реализовать это через глобальные переменные, но они почему-то не работали..
Огион
Завсегдатай
****

Репутация: 133
Offline Offline

Сообщений: 992


Ответ № 7314 22 Октябрь 2018 в 17:49
Почему-то?
ZCGamer
Активный участник
**

Репутация: 8
Offline Offline

Сообщений: 203


Гроза игростроя!

Ответ № 7315 22 Октябрь 2018 в 18:54
Как я пытался это сделать:
1 - Создал скрипт "game_settings" и перечислил в нем глобальные переменные
2 - В объекте с менюшкой настроек отсылался на этот скрипт и менял значения переменных
3 - В итоге в игре ничего не происходило
Вероятно я что-то не так сделал. Это такие дебри в которых я раньше не бывал...
Огион
Завсегдатай
****

Репутация: 133
Offline Offline

Сообщений: 992


Ответ № 7316 23 Октябрь 2018 в 11:24
Глобальные переменные нужно инициализировать один раз в начале игры. Для этого надо добавить комнату, которая будет запускаться первой, сделать все инициализации и в конце сделать переход в следующую комнату.

Можно использовать объект или Creation Code самой комнаты. Код инициализации примерно такой:

global.controls_move_up = ord("W");
//Можно также считывать настройки из файла:
global.controls_move_down = ini_read_real("Controls", "MoveDown", ord("S"));

room_goto_next();

Теперь ты можешь обращаться к переменным global.controls_move_up и global.controls_move_down из любого объекта в любой комнате.
Страниц: 1 ... 362 363 364 365 366   Вверх
  Печать  
 
Перейти в:  

RSGMC (gmakers.ru) © 2007—2018
Счётчик–@Mail.ru