народов.HTML5 Холст: Переместить прямо в точку
Сегодня я пишу игру с холстом, и у меня проблема. Я сделал это так, что, когда вы нажимаете на холст, этот игрок перемещается в точку, на которую вы нажали. Проблема в том, что если x больше y, игрок будет перемещать все правильно до тех пор, пока не дойдет до конца значения y, затем он поворачивается и переходит к точке x. Мне нужно, чтобы он прямо до такой степени, что я нажимаю. Вот мой код:
var canvas, ctx, fps;
canvas = $("#canvas")[0];
ctx = canvas.getContext("2d");
fps = 30;
window.onload = function(){init()}
function init(){
setInterval(function(){
draw();
}, 1000/fps);
}
var backgroundTile = new Image();
backgroundTile.src = "img/background.png";
var lighting = new Image();
lighting.src = "img/lighting.png"
var sprite = new Image();
sprite.src = "img/sprite.png";
var spritePos = {
posX: 288,
posY: 208
}
var goX, goY;
goX = spritePos.posX;
goY = spritePos.posY;
function update(){
if (distance(spritePos.posX, spritePos.posY, goX, goY) <= 5){
spritePos.posX = goX;
}
if (distance(spritePos.posX, spritePos.posY, goX, goY) <= 5){
spritePos.posY = goY;
}
if(spritePos.posX > goX){
if(spritePos.posX - goX > 5){
spritePos.posX -= 5;
} else {
spritePos.posX = goX;
}
} else if(spritePos.posX < goX){
if(goX - spritePos.posX > 5){
spritePos.posX += 5;
} else {
spritePos.posX = goX;
}
}
if(spritePos.posY > goY){
if(spritePos.posY - goY > 5){
spritePos.posY -= 5;
} else {
spritePos.posY = goY;
}
} else if(spritePos.posY < goY){
if(goY - spritePos.posY > 5){
spritePos.posY += 5;
} else {
spritePos.posY = goY;
}
}
}
function drawSprite(){
ctx.drawImage(sprite, spritePos.posX, spritePos.posY);
}
function drawLighting(){
ctx.drawImage(lighting, (spritePos.posX - spritePos.posX) - 7, (spritePos.posY - spritePos.posY) - 7);
}
function drawBackground(){
ctx.drawImage(backgroundTile, 0, 0);
}
$("#canvas").click(function(e){
var x = e.pageX;
var y = e.pageY;
goX = x - 32;
goY = y - 32;
});
function draw(){
clean();
drawBackground();
update();
drawSprite();
drawLighting();
}
function clean(){
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function distance(pnt1X, pnt1Y, pnt2X, pnt2Y){
var xs = 0;
var ys = 0;
xs = pnt2X - pnt1X;
xs = xs * xs;
ys = pnt2Y - pnt1Y;
ys = ys * ys;
return Math.ceil(Math.sqrt(xs + ys));
}
Я знаю, что этот вопрос запутан, поэтому, если вам нужна дополнительная информация, дайте мне знать.
Смотрите, если это может помочь вам: http://stackoverflow.com/questions/19038608/how-to-move-object-along-the-polygons/19038730#19038730 – K3N
@ Кен-AbdiasSoftware Я не знаю, как реализовать это в моем коде. –
Я добавил ответ с измененным примером этого. – K3N