【问题标题】:Need to find where 2 objects are located in Javascript需要找到 2 个对象在 Javascript 中的位置
【发布时间】:2021-01-21 19:44:48
【问题描述】:

我正在尝试获取 2 个对象位置,因此我可以让我编写的 AI 不会穿过墙壁。我的问题是,当我将它们添加到脚本时,它会忽略任何额外的 if 语句。

function findEntities() { //Function for finding the players position and setting the playerLeft and playerTop variables
    playerLeft = parseInt(player.style.left);
    playerTop = parseInt(player.style.top);
    enemyLeft = parseInt(enemy.style.left);
    enemyTop = parseInt(enemy.style.top);
    WallLeft = parseInt(wall.style.left);
    WallTop = parseInt(wall.style.top);
    chooseMovement();
    setTimeout(findEntities, 1000) //starting a loop.
}
findEntities();
function chooseMovement() { //Chooses the direction to move, moves on X-axis first, then Y-axis
    if((playerLeft - 64) > enemyLeft) || ((WallLeft - 64) != enemyLeft) {
        Right();
    } else if((playerLeft + 64) < enemyLeft) {
        Left();
    } else if((playerTop + 64) < enemyTop) {
        Up();
    } else if((playerTop - 64) > enemyTop) {
        Down();
    } else {
        damagePlayer();
}}

function Right() { //Moves the enemy right
    enemy.style.left = parseInt(enemy.style.left) + 64;
    enemyLeft += 64;
}
function Left() { //Moves the enemy left
    enemy.style.left = parseInt(enemy.style.left) - 64;
    enemyLeft -= 64;
}
function Up() { //Moves the enemy up
    enemy.style.top = parseInt(enemy.style.top) - 64;
    enemyTop -= 64;
}
function Down() { //Moves the enemy down
    enemy.style.top = parseInt(enemy.style.top) + 64;
    enemyTop += 64;
}

【问题讨论】:

  • if((playerLeft - 64) &gt; enemyLeft) || ((WallLeft - 64) != enemyLeft) — 这是语法错误。请使用constlet 并正确确定变量的范围;这将避免几个潜在的问题。 “它忽略了任何额外的 if 语句” — 不,没有任何东西被忽略。具体是什么问题?
  • 你能用一个它忽略的附加语句的例子来更新代码吗?
  • 我的问题是它忽略了``` if((playerLeft - 64) >enemyLeft) || ((WallLeft - 64) !=enemyLeft) { Right(); ``` 即使我将 Or 更改为另一个嵌套的 if 语句
  • 使用browser console (dev tools)(点击F12)并阅读任何错误。语法无效。嵌套的 if 语句和 || 不等效。仔细考虑这个函数的逻辑。
  • @Brice 仔细看括号。它说if ( ()) || ( ())。那是无效的。你的是if ( () || () ),当然是有效的。

标签: javascript html artificial-intelligence


【解决方案1】:

老实说,我不确定到底是什么给您带来了问题,但一种想法是将“检查”定义为它们自己的功能,例如:

function chooseMovement() { 
 if(checkMoveRight()) {
    Right();
 } else if((playerLeft + 64) < enemyLeft) {
    Left();
 } else if((playerTop + 64) < enemyTop) {
    Up();
 } else if((playerTop - 64) > enemyTop) {
    Down();
 } else {
    damagePlayer();
 }
}

function checkMoveRight(){
  if(playerLeft - 64 > enemyLeft){ return true }
  if(WallLeft - 64 != enemyLeft){ return true }
  return false
}

当涉及到复杂性和状态时,这引入了它自己的一系列问题,除了将事物提取到它们自己的定义中,而不是试图让所有东西都存在于主/单 if/else 调用线程中可能会有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多