[英]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.