Я работаю над реализацией 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 и мышью. Вы должны быть независимы от этого, и объект игрока должен двигаться так же, как и раньше, нет? Во всяком случае, заранее спасибо за помощь.