Почему призрак спрайта застрял на заднем плане? ГМС 2

Итак, я делаю игру в Game Maker Studio 2, и это похоже на футбол, но с полетом. Я только что сделал управление движением и реактивным ранцем, и прошлой ночью он работал, но когда я загрузил его сегодня утром, это произошло. Обычно, когда вы двигаетесь, вы видите только одно изображение (спрайт), но оно показывает, где оно было, и оставляет изображение там. Я не знаю, то ли это ошибка оперативной памяти, то ли я что-то не так сделал в коде.

код: Шаговое событие в объекте игрока

/// @description Movement logic
// Get the input
var x_input = (keyboard_check(vk_right) - keyboard_check(vk_left)) * acceleration_;

// Vector variables
var vector2_x = 0;
var vector2_y = 1;

// Horizontal movement
velocity_[vector2_x] = clamp(velocity_[vector2_x]+x_input, -max_velocity_[vector2_x], max_velocity_[vector2_x]);
var on_ground = tile_collide_at_points(collision_tile_map_id_, [bbox_left, bbox_bottom], [bbox_right-1, bbox_bottom]);
if keyboard_check(vk_right){
    if on_ground {
    sprite_index = spr_player_ground_right
    direction_=0
    }
    else {
    sprite_index = spr_player_flying_right
    direction_=0
    }
}

if keyboard_check(vk_left){
    if on_ground {
    sprite_index = spr_player_ground_left
    direction_=1
    }
    else {
    sprite_index = spr_player_flying_left
    direction_=1
    }
}

// Friction
if x_input == 0 {
    velocity_[vector2_x] = lerp(velocity_[vector2_x], 0, .2);
}


// Gravity
velocity_[vector2_y] += gravity_;

// Move and contact tiles
move_and_contact_tiles(collision_tile_map_id_, 64, velocity_);

// Jumping
var on_ground = tile_collide_at_points(collision_tile_map_id_, [bbox_left, bbox_bottom], [bbox_right-1, bbox_bottom]);
//if on_ground {
    // Jumping
    if keyboard_check(vk_space) {
        velocity_[vector2_y] = -jump_speed_;
        if direction_=0 {
        sprite_index = spr_player_flying_right
        direction_=0
        }
        else {
        sprite_index = spr_player_flying_left
        direction_=1
        }
    }
//}

Создать событие в объекте игрока

/// @description Movement variables
velocity_ = [0, 0];
gravity_ = 0.3;
jump_speed_ = 4;
max_velocity_ = [8, 32];
acceleration_ = 2.1;
direction_ = 0;

// Get the tilemap id
var layer_id = layer_get_id("CollisionTiles");
collision_tile_map_id_ = layer_tilemap_get_id(layer_id);

Я думаю, что этот код должен охватывать это.

Любая помощь приветствуется!


person Cyan Coder    schedule 14.06.2017    source источник


Ответы (2)


Вы отключили этот флажок в текущей комнате, которая рисует фон? Если да, то просто перепроверьте.

Обратите внимание, что это gm8, но это должно быть то же самое.

Проверить отрисовку фона

person Daedric    schedule 15.06.2017
comment
Я обнаружил, что всякий раз, когда я выбираю спрайт spr_crowd, он оставляет призрак. Как я могу это исправить? - person Cyan Coder; 15.06.2017
comment
Того, что вы предоставили, недостаточно, чтобы помочь вам, мне нужны хотя бы снимки экрана. - person Daedric; 15.06.2017
comment
Это была ошибка фона, изображение не заполняло экран, поэтому возник эффект призрака. Спасибо за вашу помощь! - person Cyan Coder; 16.06.2017

если у кого-то есть эта проблема, я знаю исправление, которое работает для меня.

создайте новый фоновый слой и поместите его в самый низ всех остальных слоев.

ссылка на фото

убедитесь, что вы находитесь на этом новом фоновом слое и войдите в свойства комнаты

ссылка на фото

и переходим во вьюпорты и камеры

ссылка на фото

после этого убедитесь, что у вас установлен четкий фон окна просмотра.

ссылка на фото

если это не работает для вас, извините, я не мог помочь

person battleZays    schedule 28.01.2019