дрожание экрана
|
|
SirArCade | Дата: Воскресенье, 17 Декабря 2017, 16:04 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Использую Game Maker: Studio. И столкнулся с неприятной проблемой. В комнате, когда игрок движется, камера отдаляется, а когда стоит, приближается. И в эти моменты отдаления и приближения, всё находящееся в поле зрения камеры начинает дрожать. Помогите, пожалуйста, решить эту проблему.
|
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 10:16 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Более чем уверен, что всё происходит из-за того, что код движения вида находится в Step. Аналогично тому случаю, когда ты координаты объектов приравниваешь к виду в Step - происходит дёрганье. В общем нужно знать алгоритм, которым ты всё это реализовываешь.
|
|
| |
SirArCade | Дата: Четверг, 21 Декабря 2017, 19:45 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Syank, Код прописан в End_Step
Код if instance_number(ob_player) = 1{ view_xview[0] = ob_player.x - view_wview[0]/2; view_yview[0] = ob_player.y - view_hview[0]/2; }
if instance_number(ob_player) = 0 && instance_number(ob_player2) = 1{ view_xview[0] = ob_player2.x - view_wview[0]/2; view_yview[0] = ob_player2.y - view_hview[0]/2; }
|
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 20:25 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Почему ты не используешь специальные функции для централизации вида на объекте? Эти функции настраиваются в редакторе комнат, но если ты откроешь справку по видам, то точно найдёшь как их настраивать в коде, на лету.
|
|
| |
SirArCade | Дата: Четверг, 21 Декабря 2017, 20:55 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Syank, Вы про visible when room starts object following ?
|
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 21:16 | Сообщение # 6 |
участник
Сейчас нет на сайте
| Да, object following
|
|
| |
SirArCade | Дата: Четверг, 21 Декабря 2017, 21:20 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Syank, он настроен. Код нужен для приближения и отдаления камеры от игрока.
|
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 23:05 | Сообщение # 8 |
участник
Сейчас нет на сайте
| Цитата SirArCade ( ) Syank, он настроен. Код нужен для приближения и отдаления камеры от игрока. А как ты приближаешь камеру меняя x и y вида?
|
|
| |
SirArCade | Дата: Четверг, 21 Декабря 2017, 23:09 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Syank, извиняюсь, вот код
Код if instance_number(cont_camera) > 0{
//zoom ++ if (sprite_index = sp_player ||sprite_index = sp_player_cheat) && view_wview[0] > 288 && view_hview[0] > 180 && hsp < 1 && hsp > -1 && hspeed < 1 && hspeed > -1 && vsp = 0 && state != state_grab && state != state_water{ view_hview[0] -= view_hview[0]/600; view_wview[0] -= view_wview[0]/600; }
if view_wview[0] > 288 && view_hview[0] > 180 && hsp < 0.5 && hsp > -0.5 && hspeed < 0.5 && hspeed > -0.5 && vsp = 0 && (state = state_grab || state = state_water){ view_hview[0] -= view_hview[0]/600; view_wview[0] -= view_wview[0]/600; }
//zoom -- if view_wview[0] < 480 && view_hview[0] < 300 && state != state_grab && state != state_water && (hsp >= 1 || hsp <= -1 || hspeed >= 1 || hspeed <= -1 || vsp != 0){ view_hview[0] += view_hview[0]/600; view_wview[0] += view_wview[0]/600; }
if view_wview[0] < 480 && view_hview[0] < 300 && (state = state_grab || state = state_water) && (hsp >= 0.5 || hsp <= -0.5 || hspeed >= 0.5 || hspeed <= -0.5 || vsp != 0){ view_hview[0] += view_hview[0]/600; view_wview[0] += view_wview[0]/600; } }
|
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 23:30 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Тяжело понять. Очень много условий, в частности настораживает этот state и для эксперимента я бы на твоём месте попробовал заменить view_hview[0]/600 на целое число, например 1.
|
|
| |
SirArCade | Дата: Четверг, 21 Декабря 2017, 23:48 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Syank, Пришлось сделать много условий для плавности и аккуратности. state - это скрипты движения при разных условиях(ходьба, плавание, толкание ящика). При изменении view_hview[0]/600 на целое число картинка забавно сужается по вертикали, но дрожание никуда не уходит. При увеличении значение увеличиваются скорость и сила сжатия.
Сообщение отредактировал SirArCade - Четверг, 21 Декабря 2017, 23:50 |
|
| |
Syank | Дата: Четверг, 21 Декабря 2017, 23:56 | Сообщение # 12 |
участник
Сейчас нет на сайте
| Вот я теперь думаю, ты вид увеличиваешь, а увеличивается он из левого угла. Это было бы не красиво думаю. Ты его централизуешь кодом, который скинул до этого? Может быть такой вариант, что вид не успевает централизоваться до обновления кадра, и централизуется уже после. Зум и централизация в одном событии и скрипте прописаны? По сей логике конечно, чем больше зум, тем больше дёрганье должно быть.
|
|
| |
SirArCade | Дата: Пятница, 22 Декабря 2017, 00:01 | Сообщение # 13 |
частый гость
Сейчас нет на сайте
| Зум прописан в игроке, а централизация в отдельном объекте
|
|
| |
Syank | Дата: Пятница, 22 Декабря 2017, 00:08 | Сообщение # 14 |
участник
Сейчас нет на сайте
| Цитата SirArCade ( ) Зум прописан в игроке, а централизация в отдельном объекте Попробуй, как сказано выше, всё в одну функцию запихнуть. Централизация должна происходить после зума.
|
|
| |
SirArCade | Дата: Пятница, 22 Декабря 2017, 19:22 | Сообщение # 15 |
частый гость
Сейчас нет на сайте
| Syank, пиксели увеличиваются неравномерно, дёргаются.
|
|
| |