2014-07-05 1 views
1

루프 내에서 텍스트 필드의 텍스트를 변경합니다. 그러나 코로나는 루프가 끝날 때까지 렌더링되지 않습니다. 루프 안에서 렌더링을 강제 할 수 있습니까?강제로 코로나 sdk를 루프로 렌더링

나는 display.setDrawMode ("forceRender")로 시도해 보았지만 루프에서 잠을 자지 만 문제가되지 않습니다. 업데이트하는 진행률 표시 줄을 수행하려고하는 중입니다.

+2

루프를 사용하는 대신 "local progressTimer = timer.performWithDelay (1000, updateProgress, -1)"와 같은 것을 사용하고 updateProgress 함수를 사용하면 진행률 막대를 업데이트 할 수 있습니다. –

답변

2

코로나는 이벤트 핸들러 사이에서만 렌더링됩니다. 핸들러가 반복되는 동안 Corona는 디스플레이를 업데이트 할 수 없습니다. 기본적으로 핸들러의 모든 명령은 핸들러가 제어를 Corona에 반환 한 후에 만 ​​표시에 영향을줍니다. 따라서 텍스트 필드에 값 변경을 반복하여 표시하려는 경우 루프를 사용할 수 없으며 마지막 값 변경 만 표시 후 표시 후 반환됩니다.

따라서 Corona의 메커니즘 중 하나를 사용하여 업데이트가 다시 발생해야합니다. 예를 들어 RuntimeenterFrame 이벤트를 수신 할 수 있습니다. 거기에서 값 및/또는 텍스트 필드를 업데이트하고 이에 따라 행동 할 시간인지 확인하십시오.

function updateValueDisplayed() 
    ...compute new value... 
    ...if changed, update the display object that shows the value... 
end 

timer.performWithDelay(500, updateValueDisplayed, -1) 

위의 호출 :이 너무 많은 업데이트를 리드하면, 또 다른 방법은 Frozire에 의해 제안, 나중에 텍스트 필드의 업데이트를 예약하는 것 (초당 30 또는 60 시간이 될 것입니다) 종료 할 때까지 updateValueDisplayed 초당 두 번. 지연이 매번 달라 지거나 특정 조건에서 중지해야하는 경우 performWithDelay을 한 번만 호출하고 (세 번째 호출 매개 변수를 제거) timer.performWithDelay(delay, updateValueDisplayed)updateValueDisplayed에서 적절하게 호출 할 수 있습니다.

설명 : for 루프를 사용할 수 없습니다. 반복 함수 호출 만 사용할 수 있습니다. 위의 두 가지 방법이 설명되어 있습니다.

+0

답변 해 주셔서 감사합니다. 둘 다 시도했지만 어느 누구도 작동하지 않았습니다. 그런 다음 enterframe 함수가 업데이트되지만 루프가 시작 되 자마자 업데이트 함수가 유지되고 루프가 끝난 직후에 업데이트가 시작됩니다. 그것의 코로나는 단지 하나의 실만을 사용합니다. – hidayat

+1

예, 코로나는 하나의 "스레드"에서만 실행됩니다. updateValueDisplayed() 함수 내에서 지속적으로 업데이트를 처리하는 새 루프를 만들지는 않습니다. 대신 updateValueDisplayed() 함수가 루프가되며이 함수는 계속 호출됩니다. 따라서 루프 내부의 로직을 가져 와서이 함수에 넣으십시오. –

+0

네, 고마워요. – hidayat

관련 문제