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

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

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

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


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

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

Сообщений: 992


Ответ № 7261 23 Августа 2018 в 20:42
А как именно ты используешь эту функцию?
input.txt
Не очень
Активный участник
**

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

Сообщений: 151


12.8 Gb

Ответ № 7262 24 Августа 2018 в 09:56
А дело точно в draw_line? Например вычисление координат конца того же лазера, в зависимости от реализации, может запросто высосать весь fps.

Проверил, моё ведро выдерживает 10к draw_line за кадр при 20 fps 
tolich
to ne lich
Ветеран форума
*****

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

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


moonlite

Ответ № 7263 24 Августа 2018 в 11:23
А нужно, видимо, не меньше 60 fps.

input.txt
Не очень
Активный участник
**

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

Сообщений: 151


12.8 Gb

Ответ № 7264 24 Августа 2018 в 12:46
А нужно, видимо, не меньше 60 fps.

Зато и вызовов вряд ли больше 10 000.
input.txt
Не очень
Активный участник
**

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

Сообщений: 151


12.8 Gb

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

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

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

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


moonlite

Ответ № 7266 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

Ответ № 7267 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
Ветеран форума
*****

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

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


moonlite

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

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

Mr_dd
Новичок


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

Сообщений: 3

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

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

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


moonlite

Ответ № 7270 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

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

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

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

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

Сообщений: 151


12.8 Gb

Ответ № 7272 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
Ветеран форума
*****

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

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


moonlite

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

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

input.txt
Не очень
Активный участник
**

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

Сообщений: 151


12.8 Gb

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

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

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

Сообщений: 992


Ответ № 7275 22 Октября 2018 в 17:49
Почему-то?
Огион
Завсегдатай
****

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

Сообщений: 992


Ответ № 7276 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 из любого объекта в любой комнате.
tolich
to ne lich
Ветеран форума
*****

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

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


moonlite

Ответ № 7277 04 Декабря 2018 в 11:57
Перейти на GMS. Серьёзно, там это давно поправлено.
Version 1.4.1767 10/07/2017
...
Misc In-game
...
Fixed the view intersection events - "Outside View" and "Boundary View" - to be much more accurate.

tolich
to ne lich
Ветеран форума
*****

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

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


moonlite

Ответ № 7278 04 Декабря 2018 в 20:20
Придётся, как же без этого... В смысле "заново"?

tolich
to ne lich
Ветеран форума
*****

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

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


moonlite

Ответ № 7279 07 Декабря 2018 в 10:00
Никто не разбирается. В справке целый раздел этому посвящён.

tolich
to ne lich
Ветеран форума
*****

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

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


moonlite

Ответ № 7280 07 Декабря 2018 в 13:15
Задавай вопросы. Получишь ответы.

Страниц: 1 ... 360 361 362 363 364 365 366 367 368 369   Вверх
  Печать  
 
Перейти в:  

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