2014-09-26 1 views
1

테이블 대상에서 임의로 개체를 선택하는 함수를 추가하려고합니다. 나는 당신이 targets[math.random(#targets)]을 사용할 수있는 곳을 읽었지 만, 내가 할 때 resetTarget() 호출에 관계없이 대상 중 하나만 재설정하고 실제로 다음 대상을 임의로 만들지는 않습니다.루아의 테이블에서 임의로 오브젝트를 선택하려면 어떻게해야합니까?

local targets -- an array of target objects 

local bomb = display.newImage("bomb.png") 
local asteroid = display.newImage("asteroid.png") 
local balloon = display.newImage("balloon.png") 

targets = { bomb, asteroid, balloon } 

function createTarget() 
    for i = 1, #targets do 
     local t = targets[i] 
     t.x = WIDTH + 50 -- start slightly off screen to the right 
     t.y = math.random(100, HEIGHT - 100) -- at random altitude 
    end 
end 

function resetTarget(obj) 
    createTarget() 
end 

function detectHits() 
     -- Do hit detection for ball against each target 
    local HIT_SLOP = BIRD_RADIUS * 2 -- Adjust this to adjust game difficulty 
    for i = 1, #targets do 
     local t = targets[i] 
     if math.abs(t.x - bird.x) <= HIT_SLOP 
       and math.abs(t.y - bird.y) <= HIT_SLOP then 
      -- Hit 
      isBomb(t) 
      isAsteroid(t) 
      isBalloon(t) 
      resetTarget(t) 
      updateScore() 
     end 
    end 
end 

답변

5

이 방법을 사용할 수 있지만 currentTarget에 대한 참조가 필요합니다.

임의 타겟을 타겟팅하는 기능은 무엇입니까?

+0

무작위 대상은 detectTarget (t)을 호출하며 무작위 대상을 만들어야하는 createTarget()을 호출해야하는 detectHits()를 대상으로합니다. – jeppy7

+0

또한, 코드의 현재 줄 currentTarget = targers [rand]는 currentTarget = targets [rand] 여야합니다. 또한, 루아 함수를 작성하는 표준 방법은 다음과 같습니다 : function newTarget() ... – jeppy7

+1

'table.maxn (targets)'대신'# targets'를 사용하는 것이 더 좋습니다. – lhf