проблема с 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) --------------------------------------------- Глянь еще тут: ссылка Там четвертый пункт про то, что нужно не забывать чистить сурфейс. Может это поможет. Если я вообще правильно понимаю проблему! Потому что я так и не понял, что у тебя не так-то!
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 |
|
| |