Ограничение движений сеткой ⇐ Javascript
-
Гость
Ограничение движений сеткой
Это весь код. Чтобы получить остальную часть, вам потребуется доступ к библиотеке ProcessingJS Академии Хана. Моя проблема в том, что когда вы начинаете движение (используя ПКМ), а затем, пока эллипс движется, начинаете другое движение, эллипс может отключиться от сетки, и это выглядит странно. Мне интересно, как мне сделать так, чтобы этого не происходило, сохранив при этом возможность перезаписать одно движение другим. Возможно, заставив его вернуться в центр квадрата сетки, прежде чем начать новое движение? но я понятия не имею, КАК это сделать. если бы вы начали новое движение, пока эллипс не находился в центре своего текущего квадрата, он продолжал бы двигаться, а не в центре любого квадрата, пока не достигнет своего местоположения. Я хочу это исправить.
// настройка переменной // p — текущее местоположение игрока вар пХ = 210; вар pY = 210; // m — цель движения вар мХ = 210; вар mY = 210; // t — начальная позиция вар ТХ = рХ; вар tY = pY; // s округляется до сетки вар sX = 0; вар sY = 0; // округление чисел (используется для сетки) функция roundNum(число, приращение, смещение) { return Math.ceil((число - смещение) / приращение) * приращение + смещение; } // щелчок мышью mouseClicked = функция() { если (mouseButton===39){ mX = roundNum(mouseX-10,20,10); mY = roundNum(mouseY-10,20,10); тХ = сХ; тY = сY; } }; рисовать = функция() { // настройка рисования фон(255, 255, 255); sX = roundNum(pX,20,10); sY = roundNum(pY,20,10); // сетка (возможно, найдем способ упростить) ход(0, 0, 0); заполнить(255, 255, 255); // вертикальные линии линия (380 400 380,0); линия (360 400 360,0); линия (340 400 340,0); линия (320 400 320,0); линия (300,400,300,0); линия (280 400 280,0); линия (260 400 260,0); линия (240 400 240,0); линия (220 400 220,0); линия (200 400 200,0); линия (180 400 180,0); линия (160 400 160,0); линия (140 400 140,0); линия (120 400 120,0); линия (100 400 100,0); линия(80,400,80,0); линия(60,400,60,0); линия(40,400,40,0); линия(20,400,20,0); // горизонтальные линии линия (0,20,400,20); линия (0,40,400,40); линия (0,60,400,60); линия (0,80,400,80); линия (0,100,400,100); линия (0,120,400,120); линия (0,140,400,140); линия (0,160,400,160); линия (0,180,400,180); линия (0,200,400,200); линия (0,220,400,220); линия (0,240,400,240); линия (0,260,400,260); линия (0,280,400,280); линия (0,300,400,300); линия (0,320,400,320); линия (0,340,400,340); линия (0,360,400,360); линия (0,380,400,380); // движение, надеюсь. нетИнсульта(); заполнить(18, 235, 33); если(pX!==mX){ эллипс(mX,mY,10,10); } если(pY!==mY){ эллипс(mX,mY,10,10); } еще{ если (mX >= pX) { рХ+=1; если(pY!==sY){ если(pYsY){ pY-=1; } } } если (mX < pX) { рХ-=1; если(pY!==sY){ если(pYsY){ pY-=1; } } } если (mY >= pY) { рY+=1; если(pX!==sX){ если(pXsX){ рХ-=1; } } } если (mY < pY) { pY-=1; если(pX!==sX){ если(pXsX){ рХ-=1; } } } } // игрок(?) нетИнсульта(); заполнить (0, 0, 0); эллипс(pX,pY,10,10); // границы если (рХ > 390) { рХ=390; } если (pX < 10) { рХ=10; } если (pY > 390) { рY=390; } если (pY < 10) { рY=10; } // отладка нетИнсульта(); заполнить(235, 235, 235); четырехъядерный (0,0,75,0,75,140,0,140); заполнить (0, 0, 0); ход(255, 0, 0); линия(tX,tY,mX,mY); текст("pX = "+pX,10,10); text("pY = "+pY,10,25); текст("тест = "+ноль,10,40); текст("mX = "+mX,10,55); text("mY = "+mY,10,70); текст("tX = "+tX,10,85); text("tY = "+tY,10,100); текст("sX = "+sX,10,115); text("sY = "+sY,10,130); };
Это весь код. Чтобы получить остальную часть, вам потребуется доступ к библиотеке ProcessingJS Академии Хана. Моя проблема в том, что когда вы начинаете движение (используя ПКМ), а затем, пока эллипс движется, начинаете другое движение, эллипс может отключиться от сетки, и это выглядит странно. Мне интересно, как мне сделать так, чтобы этого не происходило, сохранив при этом возможность перезаписать одно движение другим. Возможно, заставив его вернуться в центр квадрата сетки, прежде чем начать новое движение? но я понятия не имею, КАК это сделать. если бы вы начали новое движение, пока эллипс не находился в центре своего текущего квадрата, он продолжал бы двигаться, а не в центре любого квадрата, пока не достигнет своего местоположения. Я хочу это исправить.
// настройка переменной // p — текущее местоположение игрока вар пХ = 210; вар pY = 210; // m — цель движения вар мХ = 210; вар mY = 210; // t — начальная позиция вар ТХ = рХ; вар tY = pY; // s округляется до сетки вар sX = 0; вар sY = 0; // округление чисел (используется для сетки) функция roundNum(число, приращение, смещение) { return Math.ceil((число - смещение) / приращение) * приращение + смещение; } // щелчок мышью mouseClicked = функция() { если (mouseButton===39){ mX = roundNum(mouseX-10,20,10); mY = roundNum(mouseY-10,20,10); тХ = сХ; тY = сY; } }; рисовать = функция() { // настройка рисования фон(255, 255, 255); sX = roundNum(pX,20,10); sY = roundNum(pY,20,10); // сетка (возможно, найдем способ упростить) ход(0, 0, 0); заполнить(255, 255, 255); // вертикальные линии линия (380 400 380,0); линия (360 400 360,0); линия (340 400 340,0); линия (320 400 320,0); линия (300,400,300,0); линия (280 400 280,0); линия (260 400 260,0); линия (240 400 240,0); линия (220 400 220,0); линия (200 400 200,0); линия (180 400 180,0); линия (160 400 160,0); линия (140 400 140,0); линия (120 400 120,0); линия (100 400 100,0); линия(80,400,80,0); линия(60,400,60,0); линия(40,400,40,0); линия(20,400,20,0); // горизонтальные линии линия (0,20,400,20); линия (0,40,400,40); линия (0,60,400,60); линия (0,80,400,80); линия (0,100,400,100); линия (0,120,400,120); линия (0,140,400,140); линия (0,160,400,160); линия (0,180,400,180); линия (0,200,400,200); линия (0,220,400,220); линия (0,240,400,240); линия (0,260,400,260); линия (0,280,400,280); линия (0,300,400,300); линия (0,320,400,320); линия (0,340,400,340); линия (0,360,400,360); линия (0,380,400,380); // движение, надеюсь. нетИнсульта(); заполнить(18, 235, 33); если(pX!==mX){ эллипс(mX,mY,10,10); } если(pY!==mY){ эллипс(mX,mY,10,10); } еще{ если (mX >= pX) { рХ+=1; если(pY!==sY){ если(pYsY){ pY-=1; } } } если (mX < pX) { рХ-=1; если(pY!==sY){ если(pYsY){ pY-=1; } } } если (mY >= pY) { рY+=1; если(pX!==sX){ если(pXsX){ рХ-=1; } } } если (mY < pY) { pY-=1; если(pX!==sX){ если(pXsX){ рХ-=1; } } } } // игрок(?) нетИнсульта(); заполнить (0, 0, 0); эллипс(pX,pY,10,10); // границы если (рХ > 390) { рХ=390; } если (pX < 10) { рХ=10; } если (pY > 390) { рY=390; } если (pY < 10) { рY=10; } // отладка нетИнсульта(); заполнить(235, 235, 235); четырехъядерный (0,0,75,0,75,140,0,140); заполнить (0, 0, 0); ход(255, 0, 0); линия(tX,tY,mX,mY); текст("pX = "+pX,10,10); text("pY = "+pY,10,25); текст("тест = "+ноль,10,40); текст("mX = "+mX,10,55); text("mY = "+mY,10,70); текст("tX = "+tX,10,85); text("tY = "+tY,10,100); текст("sX = "+sX,10,115); text("sY = "+sY,10,130); };
Мобильная версия