2012-11-10 5 views
0
내가 화면에 개체를 이동하려면 다음 여유 함수를 사용하는 프로젝트에서 일하고 있어요

:는 완화 페너에서 경계 값 밖으로 방지

function easeinoutquart(t,b,c,d) as float 
    't=time, b=startvalue, c=change in value, d=duration 
    d=d/2 
    t=t/d 
    if (t < 1) then 
     return c/2*t*t*t*t + b 
    end if 
    t=t-2 
    return -c/2 * (t*t*t*t - 2) + b 
end function 

나는 값이 밖으로 빠르게 이동 상황에 계속 실행 어지러운 속도로 화면 밖으로 움직이는 물체가 생기는 경계. 첫 번째 상황은 함수의 결과를 정수 값으로 절단하여 발생하는 것 같았습니다. 그 다음으로 똑같은 동작을 유발 한 것은 객체가 멈추고 새로운 여유 거리가 입력 된 후 시간 값이 재설정되지 않은 것처럼 보였습니다. 목적지 값 (change = destination-start)을 변경 한 후 재설정을 추가하면 문제가 완전히 수정 된 것 같습니다.

이제 이미지를 다운로드하고 교체하는 루프에 코드를 추가했습니다. 루프에서 추가 된 실행 시간은 때때로 값을 경계 밖으로 이동시켜 화면 밖으로 돌진하는 동일한 이미지 흐림을 생성하는 것처럼 보입니다.

간단히 코드를 설명합니다 :

loop 
    check for user input (up down left right select) 
     if so set new dest position for all images, reset timer for all images 
     if a new image is selected on screen, load related content, reset related content timer 

     is there an image in the queue to download? if so get initiate async download 
     are any images downloaded? If so swap out temp image with final image 

     call easing function for primary images (vertical movement on y axis) 
     call easing function for related content (horizontal movement on x axis) 
     draw all graphics and swap display buffer 
end loop 

전에 코드 (실제 스왑 그냥 포인터 변화)를 모든 사전로드 된 이미지 및 임시 이미지 모두 큰 작업 된 이미지 다운로드/스왑을 추가 할 수 있습니다. 이제 임시 이미지를로드하고 스와핑을 수행 했으므로 루프가 1 초 30 분의 1 초 이상 실행되고 어쩌면 이상한 타이머 값을 유발할 수 있다고 생각합니다.

본질적으로, 나는 어떤 종류의 "governer"클램프가 있는지 궁금합니다. 나는 이완 기능이 신속하게 제어 할 수없는 미친 값을 생성하지 못하도록하는 가치를 부여 할 수 있습니다. 예를 들어 이동 된 총 거리는 단일 반복에서 250 픽셀을 넘지 않아야합니다. 실제로 대상 값을 향한 단지 몇 픽셀이어야합니다.

답변

0

나는이 질문을 잘하지 않았지만, 나는 결국 대답을 발견했다. 내가 직면 한 문제는 지속 시간의 가치보다 더 큰 시간 가치에 기인합니다.

위의 함수에서 대상 값, 현재 값 및 시작과 대상 간의 차이 만 입력하면 안됩니다. 내가 생각해 낸 해결책은 다음과 같다. easing 함수를 호출하는 사이의 실행 시간이 easing을 완료하는 데 허용되는 최대 허용 지속 시간 값을 초과하면 시작 값을 대상 값과 같게 설정하면된다.

시간 완화 기능이 시작된 이래로 밀리 세컨드 수있다 : 시간 기간을 초과하는 경우

change=destination-currentposition 
currentposition=inoutquart(time,currentposition,change,duration) 
if time > duration then startarray[i]=destarray[i] 

그래서 이렇게 우리는 목적지 위치에 대한 출력 값 클램프.