gpt4 book ai didi

javascript - 顶级属性不会更新。函数仅在我设置 if function value = to initial top value in javascript 时有效

转载 作者:行者123 更新时间:2023-11-28 03:56:46 26 4
gpt4 key购买 nike

我当时正在研究碰撞检测,并认为我可以通过测试对象何时到达某个 x 位置来简单地开始。当我将它设置为 100 时它起作用,这是 'character 的初始最高值,这让我相信问题出在 top 更新上;但是,如果是这种情况,我不明白为什么圆圈会移动。如果你能告诉我如何保持“顶部”更新或更好,请帮助我进行碰撞检测,那就太好了!

(ps。我知道将 css、javascript 和 html 放在一个页面中是不好的。我把它作为网站的一部分,但将它移到了一个文件中,这样我就可以单独测试它而无需查看整个网站,一旦我弄清楚了,我会把它添加到适当的文件中。)

 <html>
<head>
<style>
#character {
position: absolute;
width: 42px;
height: 42px;
background: black;
border-radius: 50%;
}
#character2 {
position: absolute;
width: 42px;
height: 42px;
background: pink;
border-radius: 50%;
} </style>
</head>
<body>

<div id = 'character'></div>
<div id = 'character2'></div>

<script>
var keys = {};
keys.UP = 38;
keys.LEFT = 37;
keys.RIGHT = 39;
keys.DOWN = 40;
keys.W = 87;
keys.A = 65;
keys.D = 68;
keys.S = 83;

/// store reference to character's position and element
var character = {
x: 1000,
y: 100,
speedMultiplier: 1,
element: document.getElementById("character")
};

var character2 = {
x: 100,
y: 100,
speedMultiplier: 3,
element: document.getElementById("character2")
};


/// key detection (better to use addEventListener, but this will do)
document.body.onkeyup =
document.body.onkeydown = function(e){
/// prevent default browser handling of keypresses
if (e.preventDefault) {
e.preventDefault();
}
else {
e.returnValue = false;
}
var kc = e.keyCode || e.which;
keys[kc] = e.type == 'keydown';
};

/// character movement update
var moveCharacter = function(dx, dy){
character.x += (dx||0) * character.speedMultiplier;
character.y += (dy||0) * character.speedMultiplier;
character.element.style.left = character.x + 'px';
character.element.style.top = character.y + 'px';
};

var moveCharacter2 = function(dx, dy){
character2.x += (dx||0) * character2.speedMultiplier;
character2.y += (dy||0) * character2.speedMultiplier;
character2.element.style.left = character2.x + 'px';
character2.element.style.top = character2.y + 'px';
};
/// character control
var detectCharacterMovement = function(){
if ( keys[keys.LEFT] ) {
moveCharacter(-1, 0);
}
if ( keys[keys.RIGHT] ) {
moveCharacter(1, 0);
}
if ( keys[keys.UP] ) {
moveCharacter(0, -1);
}
if ( keys[keys.DOWN] ) {
moveCharacter(0, 1);
}
if ( keys[keys.A] ) {
moveCharacter2(-1, 0);
}
if ( keys[keys.D] ) {
moveCharacter2(1, 0);
}
if ( keys[keys.W] ) {
moveCharacter2(0, -1);
}
if ( keys[keys.S] ) {
moveCharacter2(0, 1);
}
};


/// update current position on screen
moveCharacter();
moveCharacter2();

/// game loop
setInterval(function(){
detectCharacterMovement();
}, 1000/24);

function getPosition() {

var elem = document.getElementById("character");
var top = getComputedStyle(elem).getPropertyValue("top");
if (top == '200px') {
alert ("hi");
}
getPosition()
}
getPosition()
// var pos1 = document.getElementById('character').style.top


</script>
</body>
</html>

最佳答案

我想通了!我只是添加了 Jquery 的 .position() 来获取坐标!对于碰撞检测,我添加了这个:

function collision1() {
$(document).ready(function(){
var x = $("#character").position();
var y = $("#character2").position();
var zid = '#' + id
var z = $(zid).position();
var topX = parseInt(x.top);
var topZ = parseInt(z.top);
var leftX = parseInt(x.left);
var leftZ = parseInt(z.left);
var topY = parseInt(y.top);
var leftY = parseInt(y.left);
if (topX > topZ && topX < (topZ + 50) && leftX > leftZ && leftX < (leftZ + 100)) {
alert('Player 1 Won! Click restart to play again.')
document.getElementById("button2").style.display = "block";
document.getElementById("def").style.display = "none";
document.getElementById("def2").style.display = "none";
document.getElementById("def3").style.display = "none";
document.getElementById("def4").style.display = "none";
document.getElementById("term").style.display = "none";
}
else {
collision1()}
});}

我知道这可能不是最有效的编程方式,但它确实有效!

关于javascript - 顶级属性不会更新。函数仅在我设置 if function value = to initial top value in javascript 时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43421106/

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