gpt4 book ai didi

javascript - 用js移动svg框

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:12 27 4
gpt4 key购买 nike

这是一个可以使用箭头键移动的 svg 框。

我希望这个框在箭头被释放时停止,并继续相应地移动到按下的键。

此应用使用 svg、js 和 jquery。

已经看了,但没有找到答案。请帮助这个事业。

$(function() {
var y = 4;
var x = 4;
var n;
var move;

$(document).keydown(function(e) {
switch(e.which) {
case 37: // left
move = setInterval(move_left, .1);
break;
case 38: // up
move = setInterval(move_up, .1);
break;
case 39: // right
move = setInterval(move_right, .1);
break;
case 40: // down
move = setInterval(move_down, .1);
break;
default:
return;
}
e.preventDefault();
});

function move_left() {
$("#block_green").attr({
x: x
});
x--;
}

function move_up() {
$("#block_green").attr({
y: y
});
y--;
}

function move_right() {
$("#block_green").attr({
x: x
});
x++;
}

function move_down() {
$("#block_green").attr({
y: y
});
y++;
}
}
});
body {
margin: 0;
overflow: hidden;
}

svg {
background-color: black;
width: 100vw;
height: 100vh;
}

#block_green {
fill: black;
stroke: #00ff00;
stroke-width: .5px;
}
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<svg>
<rect x="4" y="4" width="80" height="60" id="block_green"/>
</svg>
</body>
</html>

代码在这里似乎不起作用,所以你可能想访问http://codepen.io/julian-a-avar/pen/PqZvxp要查看实际效果,您可能需要检查编辑器,因为正如我之前所说,预览在这里似乎不起作用!!!

最佳答案

我将使循环独立并设置变量来确定按下哪些

使用 keydown 将变量设置为 true 并使用 keyup 将变量设置回 false

类似的东西:

$(function() {
var y = 4;
var x = 4;
var n;
var move;
var leftPressed = false;
var rightPressed = false;
var downPressed = false;
var upPressed = false;
setInterval(function(){
if(leftPressed){
move_left();
}else if(rightPressed){
move_right();
}
if(upPressed){
move_up();
}else if(downPressed){
move_down();
}
},.01)
$(document).keydown(function(e) {
switch(e.which) {
case 37: // left
leftPressed = true;
break;
case 38: // up
upPressed = true;
break;
case 39: // right
rightPressed =true;
break;
case 40: // down
downPressed = true;
break;
default:
return;
}
e.preventDefault();
});
$(document).keyup(function(e) {
switch(e.which) {
case 37: // left
leftPressed = false;
break;
case 38: // up
upPressed = false;
break;
case 39: // right
rightPressed =false;
break;
case 40: // down
downPressed = false;
break;
default:
return;
}
e.preventDefault();
});

function move_left() {
$("#block_green").attr({
x: x
});
x--;
}

function move_up() {
$("#block_green").attr({
y: y
});
y--;
}

function move_right() {
$("#block_green").attr({
x: x
});
x++;
}

function move_down() {
$("#block_green").attr({
y: y
});
y++;
}


});

注意 setInterval 只是检查变量以确定调用哪些方法来移动框。

这是一个codepen with an example

问题二

如何调整移动 block 的速度?

调整速度的一种方法是设置一个变量,该变量决定 setInterval 中每次传递时 xy 的变化量。因此,创建另一个变量 n 并将该值设置得越高,方 block 移动得越快,设置得越低,它移动得越慢。

此外,您询问是否有缩短代码的方法。如果您有创意,可能有很多方法可以改进代码。下面我提供了一个带有变量 n 的示例,并提供了一种可以缩短代码的方法。不是为每个按下的键设置变量,而是为水平轴和垂直轴设置两个变量:

$(function() {
var y = 4;
var x = 4;
var n = 1;
var move;
var xDirection = 0;
var yDirection = 0;
setInterval(function(){
x = x + (xDirection * n);
y = y + (yDirection * n);
$("#block_green").attr({
y: y,
x: x
});
},.01)
$(document).keydown(function(e) {
xDirection = e.which == 37 ? -1 : xDirection;
xDirection = e.which == 39 ? 1 : xDirection;
yDirection = e.which == 38 ? -1 : yDirection;
yDirection = e.which == 40 ? 1 : yDirection;
e.preventDefault();
});
$(document).keyup(function(e) {
xDirection = e.which == 37 ? 0 : xDirection;
xDirection = e.which == 39 ? 0 : xDirection;
yDirection = e.which == 38 ? 0 : yDirection;
yDirection = e.which == 40 ? 0 : yDirection;
e.preventDefault();
});
});

这是另一个 codepen of the changes

另外,我建议研究一些基本的游戏算法(例如 80 年代的街机游戏,即太空入侵者等)它们将具有这种游戏逻辑。

如果您有兴趣,vimeo 上的这个视频非常棒,是此类开发的一个很好的例子,developer creating space invaders real time in javascript

关于javascript - 用js移动svg框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com