루프 내에서 텍스트 필드의 텍스트를 변경합니다. 그러나 코로나는 루프가 끝날 때까지 렌더링되지 않습니다. 루프 안에서 렌더링을 강제 할 수 있습니까?강제로 코로나 sdk를 루프로 렌더링
나는 display.setDrawMode ("forceRender")로 시도해 보았지만 루프에서 잠을 자지 만 문제가되지 않습니다. 업데이트하는 진행률 표시 줄을 수행하려고하는 중입니다.
루프 내에서 텍스트 필드의 텍스트를 변경합니다. 그러나 코로나는 루프가 끝날 때까지 렌더링되지 않습니다. 루프 안에서 렌더링을 강제 할 수 있습니까?강제로 코로나 sdk를 루프로 렌더링
나는 display.setDrawMode ("forceRender")로 시도해 보았지만 루프에서 잠을 자지 만 문제가되지 않습니다. 업데이트하는 진행률 표시 줄을 수행하려고하는 중입니다.
코로나는 이벤트 핸들러 사이에서만 렌더링됩니다. 핸들러가 반복되는 동안 Corona는 디스플레이를 업데이트 할 수 없습니다. 기본적으로 핸들러의 모든 명령은 핸들러가 제어를 Corona에 반환 한 후에 만 표시에 영향을줍니다. 따라서 텍스트 필드에 값 변경을 반복하여 표시하려는 경우 루프를 사용할 수 없으며 마지막 값 변경 만 표시 후 표시 후 반환됩니다.
따라서 Corona의 메커니즘 중 하나를 사용하여 업데이트가 다시 발생해야합니다. 예를 들어 Runtime
의 enterFrame
이벤트를 수신 할 수 있습니다. 거기에서 값 및/또는 텍스트 필드를 업데이트하고 이에 따라 행동 할 시간인지 확인하십시오.
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
루프를 사용할 수 없습니다. 반복 함수 호출 만 사용할 수 있습니다. 위의 두 가지 방법이 설명되어 있습니다.
답변 해 주셔서 감사합니다. 둘 다 시도했지만 어느 누구도 작동하지 않았습니다. 그런 다음 enterframe 함수가 업데이트되지만 루프가 시작 되 자마자 업데이트 함수가 유지되고 루프가 끝난 직후에 업데이트가 시작됩니다. 그것의 코로나는 단지 하나의 실만을 사용합니다. – hidayat
예, 코로나는 하나의 "스레드"에서만 실행됩니다. updateValueDisplayed() 함수 내에서 지속적으로 업데이트를 처리하는 새 루프를 만들지는 않습니다. 대신 updateValueDisplayed() 함수가 루프가되며이 함수는 계속 호출됩니다. 따라서 루프 내부의 로직을 가져 와서이 함수에 넣으십시오. –
네, 고마워요. – hidayat
루프를 사용하는 대신 "local progressTimer = timer.performWithDelay (1000, updateProgress, -1)"와 같은 것을 사용하고 updateProgress 함수를 사용하면 진행률 막대를 업데이트 할 수 있습니다. –