Баг в событии Draw
| |
SirArCade | Дата: Суббота, 28 Января 2017, 23:57 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Работаю на GameMaker: Studio и я даже не мог подумать, что у меня появится такая тупая проблема, но. Если я в перехожу в первую комнату где есть объект в котором используется событие Draw, а после этого перехожу во вторую комнату где используется другой объект с событием Draw то всё, что рисуется смещается вверх. Зато, если я не буду переходить в первую комнату то во второй всё будет рисоваться правильно.
Буду очень благодарен за помощь. Заранее спасибо.
|
|
| |
Losiah | Дата: Воскресенье, 29 Января 2017, 00:12 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| Скорее всего это не баг, а где-то в коде проблемы. Понятие не имею в чём дело, мб вы тут и там использовали глобальные переменные для указания координат отрисовки. к примеру я использую их при генерации карты, если значение поменять то всё в кашу превратится. ещё я бы поискал отсылки к объектам может вы где-то название перепутали, попробуйте сохранять прогресс в комнатах. Ну и гугл в помощь.
|
|
| |
Rean | Дата: Воскресенье, 29 Января 2017, 00:15 | Сообщение # 3 |
участник
Сейчас нет на сайте
| SirArCade, отрисовываете сразу на экран или через surface? Уверены, что нигде не происходит инкрементирование (декрементирование) координат отрисовки? Неплохо было бы увидеть, что конретно происходит не так (как должно быть и как есть).
|
|
| |
SirArCade | Дата: Воскресенье, 29 Января 2017, 19:22 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Losiah, Rean, для отрисовки координат глобальные переменные не использую, отрисовываю сразу(не через surface)
вот как должно быть: http://s1.uploadpics.ru/images/ZJcQZvzbgz.png http://s1.uploadpics.ru/images/-1itbvMZxf.png
после перехода в эту комнату: http://s1.uploadpics.ru/images/bJBn-wzZgM.png
происходит вот это: http://s1.uploadpics.ru/images/bJoRZvf-ez.png http://s1.uploadpics.ru/images/Z1ceGDfbgz.png
|
|
| |
LunarPixel | Дата: Воскресенье, 29 Января 2017, 19:41 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| SirArCade, есть какой-то постоянный объект в комнате с выбором уровня? Если да, то в нем, возможно, выравнивание по вертикале стоит другое, по верху, например, а не по центру или типа того.
|
|
| |
SirArCade | Дата: Воскресенье, 29 Января 2017, 19:47 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| LunarPixel, для объекта в игровой комнате
для объекта в комнате с выбором уровня
|
|
| |
Luxorix | Дата: Воскресенье, 29 Января 2017, 19:50 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| draw_set_halign(0); draw_set_valign(fa_center)
Вот с этим разберись. И у тебя не все уходит, а только текст.
должно быть как минимум вот так: draw_set_halign(fa_center); draw_set_valign(fa_middle);
LUXORIX GAMES
Сообщение отредактировал Luxorix - Воскресенье, 29 Января 2017, 19:51 |
|
| |
LunarPixel | Дата: Воскресенье, 29 Января 2017, 19:55 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| Для объекта в комнате с выбором уровня выравнивание по вертикале, по идеи, должно быть draw_set_valign(fa_middle), для вертикали нет fa_center.
Если проблема останется, то для объекта в игровой комнате добавь перед выводом текста
draw_set_valign(fa_top); //или fa_middle, или fa_bottom, смотря что тебе надо
|
|
| |
Rean | Дата: Воскресенье, 29 Января 2017, 20:01 | Сообщение # 9 |
участник
Сейчас нет на сайте
| SirArCade, Александр прав, дело скорее всего в
Код draw_set_valign(fa_center) Варианта два: вернуть к прежнему выравниванию сразу после конструкции switch { }, либо непосредственно перед отрисовкой в игровой комнате. P.S. GameMaker'а сейчас нет под рукой, но насколько я помню, для выравнивания по вертикали используются fa_top, fa_middle, fa_bottom; значение fa_center используется для выравнивания по горизонтали (draw_set_halign).Добавлено (29 января 2017, 20:01) --------------------------------------------- Собственно, выше уже ответили)
|
|
| |
2009yasha2009 | Дата: Воскресенье, 29 Января 2017, 22:42 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Советую перед каждым draw_text выполнять выравнивание. В таком случае, выравнивание будет работать на отдельных элементах отрисовки.
для объекта в игровой комнате
Код draw_self(); draw_set_valign(fa_top); draw_set_halign(fa_left);
draw_sprite(sp_coin_draw, 0, view_xview[0] + 10, view_yview[0] + 10); draw_set_color(c_black); draw_set_font(fn_coin); draw_text(23, 10, "X" + string(global.coin));
для объекта в комнате с выбором уровня
Код draw_self();
draw_set_font(fn_lvl);
draw_set_valign(fa_center); draw_set_halign(fa_left);
switch(lvl) { case 1: if global.menu_count = 1 { draw_set_color(c_black); draw_text(x + 200, y, '1'); } else draw_set_color(c_red); draw_text(x + 200, y, '1'); break; case 2: if global.menu_count = 2 { draw_set_color(c_black); draw_text(x + 200, y, '2'); } else draw_set_color(c_red); draw_text(x + 200, y, '2'); break; }
Ватануки, Ватануки - первое апреля^^
Сообщение отредактировал 2009yasha2009 - Воскресенье, 29 Января 2017, 22:43 |
|
| |
YellowAfterlife | Дата: Понедельник, 30 Января 2017, 11:55 | Сообщение # 11 |
Сейчас нет на сайте
| Цитата 2009yasha2009 ( ) Советую перед каждым draw_text выполнять выравнивание. В таком случае, выравнивание будет работать на отдельных элементах отрисовки.
Другое стандартное решение - сбрасывать настройки на стандартные (top, left) после рисования с нестандартными. Это можно наблюдать в проектах чаще, поскольку количество дополнительного кода ниже.
Если объединить установку настроек в скрипт, можно даже организовать стек настроек рисования в аналогию d3d_transform_stack_* (одна или более функций для установки настроек + функция для возврата в предыдущее состояния).
Бонус: значения встроенных констант рисования: fa_left, fa_top == 0 fa_center, fa_middle == 1 fa_right, fa_bottom == 2 c_black == 0 c_white == -1 (формально, $FFFFFF, но -1 работает везде кроме draw_clear_alpha).
|
|
| |
|