Среда, 18 Декабря 2024, 15:41

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
проблема с draw_sprite_ext
SirArCadeДата: Пятница, 06 Января 2017, 01:18 | Сообщение # 1
частый гость
Сейчас нет на сайте
Делаю платформер. У меня после уничтожения объекта происходит что то вроде взрыва из слизи, она стекает по платформам оставляя следы. Следы рисуются как спрайт слизи через draw_sprite_ext. Всё это происходит с помощью объекта(ob_controller) , но проблема в том, что если я поставлю этот объект в другой комнате эти следы спрайта останутся пока не произойдёт room_restart().

Помогите. Что делать?
TLTДата: Пятница, 06 Января 2017, 01:30 | Сообщение # 2
Сейчас на сайте
GM8 и спрайт у границ комнаты? Был такой баг, вроде...

Дао, выраженное словами, не есть истинное Дао.
SirArCadeДата: Пятница, 06 Января 2017, 02:02 | Сообщение # 3
частый гость
Сейчас нет на сайте
TLT, gamemaker studio со стима, и спрайт чаще всего не у границ
Raven84Дата: Пятница, 06 Января 2017, 07:55 | Сообщение # 4
старожил
Сейчас нет на сайте
SirArCade, Чет не совсем понял. Ты создаешь сурфейс и рисуешь на нем следы от слизи или как? И скриншот можно, чтобы хотя бы примерно понять о чем речь.

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
SirArCadeДата: Пятница, 06 Января 2017, 11:52 | Сообщение # 5
частый гость
Сейчас нет на сайте
Raven84, Да, через сурфейс. Вот скрин http://s1.uploadpics.ru/images/ZkK3EZk00W.png
Raven84Дата: Пятница, 06 Января 2017, 12:35 | Сообщение # 6
старожил
Сейчас нет на сайте
SirArCade, Ну я если честно с сурфейсами не очень хорошо лажу. Мало их использую.
Но как я понимаю, у тебя идет проверка создан ли сурфейс, и если нет то только тогда его создавать.
А так как он global, то скорее всего в следующей комнате проверка создан он или нет, будет считать, что он создан уже (ну так оно и есть) и будет рисовать на том же сурфейсе.
А так как он у тебя был изрисован следами в прошлой комнате, то он с этими же следами перейдет и в следующую. Ведь у тебя в этом проблема, я правильно понимаю?
Не знаю поможет ли, но попробуй "обнулять" сурфейс при переходе в новую комнату.
surface_free(surface_id);

Добавлено (06 января 2017, 12:32)
---------------------------------------------
В событии создания комнаты или где-то еще (но только, чтобы событие выполнялось разово) попробуй сделать так:

Код

if (!surface_exists(global.surface_blood)) {surface_free(global.surface_blood)}

Добавлено (06 января 2017, 12:34)
---------------------------------------------
Дай знать поможет ли. Самому интересно, а то вдруг в будущем столкнусь с подобной проблемой.
И еще можешь показать скрин как в игре выглядят эти следы на стенах. Чет интересно стало.

Добавлено (06 января 2017, 12:35)
---------------------------------------------
Либо как советует сама справка писать этот код прямо перед переходом в другую комнату. Но думаю это не принципиально. :)


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
SirArCadeДата: Пятница, 06 Января 2017, 13:51 | Сообщение # 7
частый гость
Сейчас нет на сайте
Raven84, спасибо за старания, но увы это не помогло
Raven84Дата: Пятница, 06 Января 2017, 14:53 | Сообщение # 8
старожил
Сейчас нет на сайте
SirArCade, Все равно мало данных. Нужно скорее весь код смотреть. Так то в любой проблеме можно разобраться.) Так же ты в топике пишешь про объект контроллер, и что все делаешь через него, но на скрине код объекта крови. В общем глубже копать нужно и источник проблемы найдётся. Так же я до сих пор не совсем понимаю в чем именно проблема. Можно скрин экрана игры с багом а не кода?

Добавлено (06 января 2017, 14:53)
---------------------------------------------
Глянь еще тут: ссылка
Там четвертый пункт про то, что нужно не забывать чистить сурфейс. Может это поможет. Если я вообще правильно понимаю проблему! :D Потому что я так и не понял, что у тебя не так-то! :D :D :D


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Пятница, 06 Января 2017, 14:47
SirArCadeДата: Пятница, 06 Января 2017, 15:25 | Сообщение # 9
частый гость
Сейчас нет на сайте
вот сам баг:

http://s1.uploadpics.ru/images/ZJfdzxWA0Z.png
http://s1.uploadpics.ru/images/bJBRzxbCA-.png

а вот весь код:

http://s1.uploadpics.ru/images/ZJhzwx-AR-.png
http://s1.uploadpics.ru/images/ZypNvg-00-.png
Raven84Дата: Пятница, 06 Января 2017, 16:57 | Сообщение # 10
старожил
Сейчас нет на сайте
Даааааа! Ну и намудрил ты там! %) Я так понял код не свой. По примеру делал? В целом-то он читабельный. Только вот не совсем понял ЗАЧЕМ столько раз в нескольких объектах да еще и в нескольких событиях писать код создания сурфейса?! И если в объекте крови он создается только после проверки есть ли он, то в объекте контроллера он создается в любом случае. Чет я не вкурил.
Попробуй кодом, что я по ссылке давал еще почистить.
Суть проблемы понял. В общем я изначально так себе и представлял, что у тебя в другой комнате сурфейс накладывается со старой.
Его как-то нужно чистить.

Добавлено (06 января 2017, 16:42)
---------------------------------------------
Только что нашел на англоговорящем форуме такую же проблему как у тебя. Говорят, что и правда чистится draw_clear_alpha(c_black,0)
В общем как в той ссылке, что я тебе давал.
Ставишь таргетом свой сурфейс. Чистишь, потом сбрасываешь таргет. Это должно помочь. По крайней мере тем людям помогло.
Мне просто лень заходить в GMS и специально под это дело писать код,чтобы проверить.

Добавлено (06 января 2017, 16:46)
---------------------------------------------
Только вот говорят, что работает это у некоторых только в событии рисования. Хм...Странно...

Добавлено (06 января 2017, 16:57)
---------------------------------------------
Надо короче практическим путем это дело тестить.
Я бы вообще повешал код очистки на нажатие какой-либо клавиши и проверял разные варианты. Когда бы при нажатии клавиши в игре сурфейс очищался, то стало бы понятно, что именно этот код рабочий и тогда уже можно было бы думать куда его встраивать при переходе между комнатами.


Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland


Сообщение отредактировал Raven84 - Пятница, 06 Января 2017, 16:55
ReanДата: Пятница, 06 Января 2017, 17:15 | Сообщение # 11
участник
Сейчас нет на сайте
Отрисовку чего-либо, из соображений оптимизации, крайне желательно производить в Draw Event'ах. В том числе и surface'ов:
Цитата
Third, you should try to draw to surfaces in the draw event. This is not always possible, but due to the optimised way in which GameMaker: Studio draws to the screen, it is recommended that you keep all draw functions within the draw event.

К тому же, если использовать draw-методы не в событии draw, возможны неконтролируемые поведения.
SirArCadeДата: Пятница, 06 Января 2017, 19:45 | Сообщение # 12
частый гость
Сейчас нет на сайте
Raven84, спасибо за всё, буду тестить

Добавлено (06 января 2017, 19:45)
---------------------------------------------
Raven84, а можешь подсказать как упростить этот код?


Сообщение отредактировал SirArCade - Пятница, 06 Января 2017, 19:47
  • Страница 1 из 1
  • 1
Поиск:

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