簡體   English   中英

針對Corona SDK的AI幫助

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM