I've found this works pretty well:
PHP Code:
function movePlayer(dir, noblock) {
temp.nx = (player.x+1.5)+(vecx(dir)*(this.speed*2));
temp.ny = (player.y+2)+(vecy(dir)*(this.speed*2));
if (!onwall(temp.nx, temp.ny) || noblock) {
player.x += vecx(dir)*this.speed;
player.y += vecy(dir)*this.speed;
return true;
}
else return false;
}
Works as perfect as I've seen so far.