[英]AI help for Corona SDK
我创建了一个游戏,该游戏在属性表中循环以创建要放置在屏幕上的敌人。 创建的敌人存储在一个名为“ baddie”的变量中,它们的x和y值由我在表中为其提供的属性确定。 目前,“ baddie”会在屏幕上的不同位置产生3个敌人。 看起来像这样。
for i=1, #level[section]["enemies"] do
local object = level[section]["enemies"][i]
baddie = display.newSprite(baddieSheet, baddieData)
baddie.anchorX = 0.5
baddie.anchorY = 1
baddie.x = object["position"][1]; baddie.y = object["position"][2];
baddie.xScale = -1
baddie.myName = "Baddie"
baddie.health = 15
baddie:setSequence("standrt"); baddie:play()
physics.addBody(baddie, "dynamic", {radius=22, density=0.1, friction=10.0, bounce=0.0})
baddie.isFixedRotation = true
enemyGroup:insert(baddie)
end
然后,我将存储在baddie变量中的所有已创建实例插入到名为“ enemyGroup”的显示组中。
现在这是我的问题。 我正在开发游戏的AI,并将其全部存储在enterFrame侦听器中。 我要创建一个名为“ inRange”的“ True / False”标志。 当敌人的x位置在玩家x的20像素以内时,inRange = true。 没错,敌人会攻击他。 但我还没有想出一个办法,使每一个人的敌人INRANGE标志检查,而不是全部。
我在想类似的东西,
for i = 1, enemyGroup.numChildren do
enemyGroup[i].widthBetween = enemyGroup[i].x - sprite.x
if enemyGroup[i].widthBetween <= 20 and enemyGroup[i].widthBetween >= -20 then
enemyGroup[i].inRange = true
else
enemyGroup[i].inRange = false
end
end
但是问题是,敌人组[i] .inRange是一个局部值,我不能在循环外或其他函数中调用它。 这显然是有问题的,因为在另一个函数中,当每个敌人的inRange属性为true时,我想让每个敌人对其进行猛击,滚动,跳跃等操作。 有没有一种方法可以存储敌人组[i] .inRange,以便随时可以调用它?
抱歉,这个问题令人困惑。 很难说出来。
我不确定为什么这对您不起作用。 敌人组[i] .inRange不是本地的,它是敌人组[i]上对象的一个属性。 您可以访问敌人组[i]的任何地方都应该如此。
就我个人而言,我不会为此使用display.newGroup(),而是会创建一个针对整个场景的数组/表。
local baddies = {}
然后在您的循环中:
--enemyGroup:insert(baddie) instead of this, do this:
baddies[#baddies + 1] = baddie
然后,您有了一个可以循环使用的表,但是它实际上是比功能更多的代码样式。 只要您的敌人组的作用域范围足够高,以使场景可以看到任何功能。
您应该在以下结构中创建一个文件:
module(..., package.seeall)
enemyGroup = {}
在要使用此表的所有文件中,首先需要此文件(假设您将此文件命名为敌人.lua):
local enemiesArray = require "enemies"
-- somewhere in your code:
enemiesArray.enemyGroup[i].isRange = true -- or whatever you like to do
有一个更好的选择供您使用_G
变量。 当您将对象存储到_G
您可以随时随地访问该对象(例如著名的设计模式Singleton)。 只需将变量设置一次,即可在任意位置和任意位置使用它。 例如:
-- in one file you set enemy table:
_G.enemies = enemyGroup
-- somewhere else in nowhere :)
print(_G.enemies.isRange)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.