2017-04-13 7 views
1

아래는 상자가 컨테이너의 경계에 올 때 스코어에 1을 더하는 코드입니다. 그것은 단지 한 번 점수 에 상자는 컨테이너 내부에 유지 밀리 초마다의 컨테이너를 입력하지 때마다 1을 추가하도록코로나에서 스코어를 지속적으로 높이는 코드 로직을 유지하려면 어떻게해야합니까?

local score = 0 
local thescore = display.newText("Score " .. score, 150,430, native.systemFont , 19) 
local function update() 
    if (crate.x > side1.x and crate.x < side2.x and crate.y < shelf.y and crate.y > shelf.y - 50) then 
      score = score + 1 
      thescore.text = "Score " .. score 
    end 
end 
timer.performWithDelay(1, update, -1) 

어떻게 그것을해야합니까?

답변

2

상태 변수

사용 변수는 상자의 상태를 저장합니다. 컨테이너 경계에서 처음 발견되면 변수를 true으로 설정하고 점수를 높이십시오. 다음 번에 update()이 호출 될 때 해당 변수가 true로 설정되면 점수는 변경되지 않습니다. 반면에 상자가 컨테이너 외부에있는 경우 변수를 false으로 설정하십시오. 그것은 (의사의)과 같습니다 그런데

local score = 0 
local alreadyContained = false 

local function update() 
    if crateIsInContainer() then 
     if alreadyContained == false then 
      alreadyContained = true 
      score = score + 1 
     end 
    else 
     alreadyContained = false 
    end 
end 
timer.performWithDelay(20, update) 

, 그것은 프레임의 지속 시간보다 더 자주 업데이트 함수를 호출하는 pointless입니다. config.luafps = 60이있는 경우 17ms마다 하나의 프레임이됩니다.

사용 물리학

이 게임에 대한 잔인한 수도 있지만, 물리학 당신이 센서로 물리기구를 사용할 수 있으며 중복의 다른 단계에 응답합니다. 이것은 documented here이며, 다음과 같이 인용합니다.

모든 신체 또는 다중 요소 몸체의 특정 요소는 센서로 바뀔 수 있습니다. 센서는 다른 물체와 물리적으로 상호 작용하지 않지만 다른 물체가 통과 할 때 충돌 이벤트를 생성합니다. 센서와 충돌하는 물체는 일반적인 비 센서 물체와 마찬가지로 "시작됨"이벤트 단계를 트리거합니다. 또한 센서의 충돌 경계를 벗어날 때 "종료 된"이벤트 단계를 트리거합니다.

또한 물리기구의 사용은 당신이에 관심을 보이는 것입니다, 이는 오히려 봉쇄보다 중복 감지 있음을 유의하십시오.