Javascript 到达容器边界时停止图像移动
我有把小提琴: 如何防止玩家移动到容器边界之外?试试以下方法:Javascript 到达容器边界时停止图像移动,javascript,jquery,Javascript,Jquery,我有把小提琴: 如何防止玩家移动到容器边界之外?试试以下方法: $(文档).ready(函数(){ var player=$(“#player”), shuriken=$(“shuriken”), 容器=$(“#容器”), w=container.width()-shuriken.width(); $(窗口).keydown(函数(e){ 如果(e.which==38){ if(parseInt(player.css('top'))>10){ 动画({top:'-=20px'}); 动画({to
$(文档).ready(函数(){
var player=$(“#player”),
shuriken=$(“shuriken”),
容器=$(“#容器”),
w=container.width()-shuriken.width();
$(窗口).keydown(函数(e){
如果(e.which==38){
if(parseInt(player.css('top'))>10){
动画({top:'-=20px'});
动画({top:'-=20px'});
}
}//向上
如果(e.which==40){
if(parseInt(player.css('top'))<270){
动画({top:'+=20px'});
动画({top:'+=20px'});
}
}//向下
如果(e.which==32){
if(shuriken.css('left')!=“249px”){
动画({'left':'+=280px'});
}
}
});
});
但当按住键并移动过快时,它会崩溃。您可能还需要稍微调整这些值。您可以使用if语句
if (e.which == 32){
if(shuriken.css('left') != '249px'){
shuriken.animate({ 'left' : '+=280px' });
}
}
小提琴:这里是你答案的链接
var pane=$(“#pane”),
方框=$(“#方框”),
w=窗格.width()-box.width(),
d={},
x=3;
函数newv(v,a,b){
var n=parseInt(v,10)-(d[a]?x:0)+(d[b]?x:0);
返回n<0?0:n>w?w:n;
}
$(窗口).keydown(函数(e){d[e.which]=true;});
$(window.keyup)(函数(e){d[e.which]=false;});
setInterval(函数(){
box.css({
左:函数(i,v){返回newv(v,37,39);},
顶部:函数(i,v){returnnewv(v,38,40);}
});
}, 20);
我已经编辑了您的
经过必要的修改。这对你有帮助吗?问我你是否需要更多的解释
我已经添加了这些来帮助您计算最佳边界
posDelta = 20, // amount of change in position
playerOffset = player.height() * 0.5,
playerPos = player.position().top,
maxTop = posDelta,
maxBottom = container.height() - (posDelta + playerOffset);
演示
你想要的条件是
var wallT = 0,//top
wallB =269,//bottpm
wallL = 0,//left
wallR =269;//right
function checkBoundUpDw(pos) {
if(pos > wallT && pos < wallB){
return true;
}
return false;
}
function checkBoundleftRight(pos) {
if(pos > wallL && pos <wallR){
return true;
}
return false;
}
var wallT=0,//顶部
wallB=269,//bottpm
wallL=0,//左
wallR=269//正确的
函数checkBoundUpDw(pos){
如果(位置>墙和位置<墙){
返回true;
}
返回false;
}
功能检查边界LeftRight(pos){
如果(pos>wallL&&pos谢谢大家的帮助,但是经过深思熟虑和寻找,我终于成功了,这里是最后一句话:谢谢
function newv(v, a, b) {
var n = parseInt(v, 10) - (d[a] ? x : 0) + (d[b] ? x : 0);
return n < 0 ? 0 : n > w ? w : n;
}
$(window).keydown(function (e) {
d[e.which] = true;
if (e.which == 32) {
if (!shurikenHitBorder) {
shuriken.animate({ left: '+=280px' }, 'fast');
shuriken.fadeIn(100);
}
shurikenHitBorder = true;
}
});
$(window).keyup(function (e) { d[e.which] = false; });
setInterval(function () {
box.css({top: function (i, v) { return newv(v, 38, 40); }});
}, 20);
函数newv(v,a,b){
var n=parseInt(v,10)-(d[a]?x:0)+(d[b]?x:0);
返回n<0?0:n>w?w:n;
}
$(窗口).keydown(函数(e){
d[e.which]=真;
如果(e.which==32){
如果(!shurikenHitBorder){
动画({left:'+=280px'},'fast');
shuriken.fadeIn(100);
}
shurikenHitBorder=true;
}
});
$(window.keyup)(函数(e){d[e.which]=false;});
setInterval(函数(){
css({top:function(i,v){returnnewv(v,38,40);}});
}, 20);
在每次移动前添加一个边界条件,即..检查新位置是否在左墙和右墙之间或上墙和下墙之间,否则保持相同的位置能否请你给我举个例子@SarathSaleem试试这给了我一个奇怪的行为:@Sora添加了我的答案,但现在我想要的正是我移动游戏时的问题呃上下如果他到达边界,我想阻止他。你可以看到玩家仍然在越过容器的边界。onkeydown:/这在我的屏幕上肯定有效。你在控制台中看到任何错误吗?用相同的代码创建了一个单独的JSFiddle…@Sora你能检查一下上面的小提琴是否解决了你的边界问题吗?嗯,没有w您必须实施节流。如果您无法……,我将进一步帮助您:)
posDelta = 20, // amount of change in position
playerOffset = player.height() * 0.5,
playerPos = player.position().top,
maxTop = posDelta,
maxBottom = container.height() - (posDelta + playerOffset);
var wallT = 0,//top
wallB =269,//bottpm
wallL = 0,//left
wallR =269;//right
function checkBoundUpDw(pos) {
if(pos > wallT && pos < wallB){
return true;
}
return false;
}
function checkBoundleftRight(pos) {
if(pos > wallL && pos <wallR){
return true;
}
return false;
}
function newv(v, a, b) {
var n = parseInt(v, 10) - (d[a] ? x : 0) + (d[b] ? x : 0);
return n < 0 ? 0 : n > w ? w : n;
}
$(window).keydown(function (e) {
d[e.which] = true;
if (e.which == 32) {
if (!shurikenHitBorder) {
shuriken.animate({ left: '+=280px' }, 'fast');
shuriken.fadeIn(100);
}
shurikenHitBorder = true;
}
});
$(window).keyup(function (e) { d[e.which] = false; });
setInterval(function () {
box.css({top: function (i, v) { return newv(v, 38, 40); }});
}, 20);