如何在Allegro中使玩家对象跟随鼠标?

时间:2019-11-09 17:29:25

标签: c camera game-development mousemove allegro5

我正在使用Allegro库(用于学校)在C中实现Agar.io的实现。目前,我可以像在allegro vivace教程中设置播放器一样,为播放器增加速度。

但是,Agar.io不能那样工作,因为在那里播放器对象总是试图追上鼠标。最初,我的逻辑工作正常,但是在实现世界坐标之后,播放器不再跟随鼠标,而是将鼠标速度添加到了其速度中。

此代码可使运行正常:

OBS:loaded []是包含游戏中所有已加载对象的数组。 loading [0]是播放器对象,而loaded [1]是摄影机对象。相机设置为从(0,0)开始,播放器从(600,300)开始,因为显示设置为1000 x600。

            // 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和mouse.dy应该与此无关,并且与播放器对象无关应该像以前一样移动,不是吗?无论如何,请先感谢您的帮助。

0 个答案:

没有答案