Как заставить игрока следовать за мышью в Allegro? - PullRequest
0 голосов
/ 09 ноября 2019

Я работаю над реализацией Agar.io в C с библиотекой Allegro (для школы). В настоящее время я могу добавить скорость игроку так же, как он настроил его в учебнике allegro vivace.

Однако Agar.io не работает так, потому что там объект игрока всегда пытается догнать мышь. Первоначально моя логика работала нормально, но после того, как я реализовал мировые координаты, игрок больше не следовал за мышью, а вместо этого просто добавил скорость мыши к своей скорости.

В этом коде движение работает нормально:

OBS :loaded [] - это массив со всеми загруженными объектами в игре. Загруженный [0] является объектом игрока, а загруженный [1] является объектом камеры. Камера настроена на запуск с (0, 0), а проигрыватель - с (600, 300), так как дисплей настроен на 1000 x 600.

            // Speed increment
            loaded[0].x += loaded[0].dx;
            loaded[0].y += loaded[0].dy;

            // Desacceleration
            loaded[0].dx *= 0.95
            loaded[0].dy *= 0.95

        case ALLEGRO_EVENT_MOUSE_AXES: // Defines mouse movement for player.
            loaded[0].dx += event.mouse.dx * 0.05;
            loaded[0].dy += event.mouse.dy * 0.05;
            break;

Теперь, после того как я внедрил камеру, онабольше не работает:

            // Speed increment
            loaded[0].x += loaded[0].dx;
            loaded[0].y += loaded[0].dy;

            // Speed increment for camera
            loaded[1].x += loaded[0].dx;
            loaded[1].y += loaded[0].dy;

            // Desacceleration
            loaded[0].dx *= 0.95
            loaded[0].dy *= 0.95

        case ALLEGRO_EVENT_MOUSE_AXES: // Defines mouse movement for player.
            loaded[0].dx += event.mouse.dx * 0.05;
            loaded[0].dy += event.mouse.dy * 0.05;
            break;

        // Drawing logic for the camera. Before adding this, I just drew things with their x and y coords.
        if (loaded[i].x < loaded[1].x + 1000 && loaded[i].y < loaded[1].y + 600) {
                switch(loaded[i].id) {
                    case ('P'):
                        if (loaded[i].render)
                            al_draw_filled_circle(loaded[i].x - loaded[1].x, loaded[i].y - loaded[1].y, loaded[i].size, al_map_rgb(0, 255, 255));

Тот факт, что реализация камеры сломала систему, подсказывает мне, что это, вероятно, связано с системой координат мыши по отношению к мировой системе координат, но mouse.dx и мышью. Вы должны быть независимы от этого, и объект игрока должен двигаться так же, как и раньше, нет? Во всяком случае, заранее спасибо за помощь.

...