这适用于游戏应用程序 我声明了变量skipnpc,它被设计为一个非玩家角色已经使用过他的指示器,并且跳过了与他的行为相关的任何AI代码一段时间。我遇到的问题是我失去了skipnpc的值,不知怎的,我指出我在console.log命令中的哪个地方与可变范围相关,但我不明白如何解决它。
function npcMovement() {
skipnpc = false;...
sql4 = "SELECT id FROM game_moblist WHERE spawn_id =" + spawnid + " AND posx=" + parseInt(mobpathx[mobpathx.length - 1]) + " AND posy=" + parseInt(mobpathy[mobpathy.length - 1])
connection.query(sql4, function (err, send, fields) {
console.log("skipnpc pathing")
io.sockets.emit('groupmoveresult', send, parseInt(mobpathx[mobpathx.length - 1]), parseInt(mobpathy[mobpathy.length - 1]))
skipnpc = true
console.log("skipnpc=true:" + skipnpc)
});
console.log("skipnpc = false:" + skipnpc)
后来我用
if (skipnpc==false){
...
在尝试进一步的AI代码之前
答案 0 :(得分:2)
connection.query是异步执行的。因此,在完成之前,您将到达最后一行。
答案 1 :(得分:1)
简单地说,skipnpc
保证在您点击上一个false
时仍为console.log(...)
。在尝试查看结果之前,您没有给connection.query(...)
任何时间执行。任何依赖于connection.query(...)
结果的东西都必须作为你传递给它的回调的一部分来执行;否则,当您尝试访问它们时,不会有任何结果。
异步编程需要一些时间来习惯。您可以使用异步模块并使用其waterfall(...)
方法重新组织代码,这样一切都不会深深嵌套。但是你必须意识到,如果你进行异步调用,你的代码就会直接通过它。