2016-10-11 5 views
-2

5 개의 이미지를 양식의 맨 위에서 아래로 반복적으로 이동 시키십시오.이 이미지는 임의의 왼쪽 값을 사용하여 이전보다 약간 앞을 반복합니다. 나는 항상 그들의 최고 가치를 서로 맞추는 것처럼 보이지만 이것을 시도했다. 폼 활성화시 최상위 값은 모두 약 120 개 간격으로 설정됩니다.5 개의 이미지를 화면 맨 위에서 화면 아래로 반복적으로 이동하려면

코드 : (타이머)에

////// image1 ////// 
if image1.Top > 600 then begin 
image1.visible := true; 
image1.top := -300; 
repeat 
ml1 := randomrange(0, 9); 
until (ml1 <> ml2) and (ml1 <> ml3) and (ml1 <> ml4) and (ml1 <> ml5); 
case ml1 of 
    1 : image1.left := 8; 
    2 : image1.left := 80; 
    3 : image1.left := 152; 
    4 : image1.left := 224; 
    5 : image1.left := 296; 
    6 : image1.left := 368; 
    7 : image1.left := 440; 
    8 : image1.left := 512; 
    9 : image1.left := 584; 
end;//case 
end;//if 

모든 이미지는 동일한 코드를 가지고있다. 별도의 타이머에 각 이미지의 최고 값이 같은 간격으로 같은 양만큼 증가했습니다.

+0

이미지 상단이 별도의 타이머로 증가한다고합니다. 그러나 그것이 당신이 당신의 문제를 가지고있는 곳이기 때문에 보여 주어야 할 것입니다. 문제를 제시하지 않는 코드를 우리에게 보여줄 필요는 없습니다. 다른 여러 가지 문제가 있습니다. 별도의 타이머를 사용하는 이유는 무엇입니까? 그들은 불가피하게 단계를 벗어날 것입니다. 그리고 왜 코드 상단이 여기에 있고 다른 타이머에 설정되어 있습니까? 그것은 하나가되어야합니다! (하나 이상이 있어야한다는 것은 아닙니다 ...) – Dsm

+0

5 이미지의 모든 동작에 사용한 다른 타이머가 하나 있다는 것을 의미했습니다. 그들은 모두 같은 간격을 사용하고 있기 때문에 문제가 될 수 없습니다 : image1.top : = image1.top + 5; image2.top : = image2.top + 5; – User049

+1

이것은 매우 비효율적 인 방법으로 애니메이션을 적용합니다. 주변에있는 컨트롤을 사용하지 마십시오. 양식에 페인트 상자 또는 직선의 OnPaint를 사용하십시오. –

답변

0

0과 120에서 시작하는 두 개의 상위 값을 고려하십시오. 한 타이머가 자주 이러한 값을 증가시킵니다. 값이 605와 725가되면 표시 한 타이머가 작동합니다. 로직 (X> 600이면 X : = - 300)이 둘 다에 적용됩니다. 이제 값은 -300과 -300입니다.