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