Понедельник, 25 Ноября 2024, 22:04

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Баг в событии 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).


  • Страница 1 из 1
  • 1
Поиск:

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