2014-04-15 9 views
1

저는 한 번에 질문에 답해야하는 게임을 만들고 있습니다. 그 시간은 점수가 올라갈수록 줄어 듭니다. 나는이 기능을 사용하고있다. 나는 시간의 감소가 밖으로 용이하도록 제 기능을 변경하려면 http://jsfiddle.net/QWV82/Penner의 이완 방정식을 사용하여 정수 줄이기

-

var getTime = function(score){ 
    var maxTime = 5000, 
     minTime = 750; 
    var reducedTime = maxTime * (1 - (score * .1)); 
    return Math.max(reducedTime, minTime); 
} 

여기에 바이올린을 참조하십시오. Robert Penners easing equations 중 하나를 사용하고 싶습니다.

// t: current time, b: begInnIng value, c: change In value, d: duration 
easeOutQuint: function (x, t, b, c, d) { 
    return c*((t=t/d-1)*t*t*t*t + 1) + b; 
} 

내 방정식에 시스템을 적용 할 수 있는지 확실하지 않습니다. 나는이 함수에 무엇을 전달해야 하는지를 알 수 없다.

이것이 가능합니까? 내가해야 할 일에 대한 설명은 환상적 일 것이다.

+0

이것이 도움이되는지는 확실하지 않지만 http://easings.net/에는 여유 작업 방식을 보여주는 멋진 다이어그램이 있습니다. – Pete

+0

훌륭한 시각화, Mr Rampage – Andreas

답변

1

당신은 (그림과 같이 당신이하는 maxScore 일정이 필요합니다) 같은 easeOutQuint()을 사용할 수 있어야합니다 : 당신이 출력 값을 원한다고 때문에

var getTime = function(score){ 
    var maxTime = 5000, 
     minTime = 750, 
     maxScore = 100; 
    return maxTime + minTime - easeOutQuint(null, score, minTime, maxTime-minTime, maxScore); 
} 

우리는 minTime 및 MaxTime의 합에서 빼기 아래로 기울기. 따라서 반환 값은 maxTime에서 시작하여 minTime으로 끝납니다. 다음과 같이 완화 기능에

매개 변수는 다음과 같습니다

  • X :이 실제로 무시하지만, jQuery를 필요합니다.
  • t : 현재 입력 값입니다 (일반적으로 이것은 시간 간격이지만 반드시 그럴 필요는 없습니다). 범위는 [0..d]입니다.
  • b : 시작 출력 값입니다.
  • c : 출력 값의 최대 변화.
  • d : 최대 입력 값 (일반적으로 시간 간격이지만 반드시 그런 것은 아닙니다).
+0

@ Finnnn 사용자가 점수가 올라감에 따라 시간이 증가하므로 다른 여유 알고리즘을 사용하고 싶다고 생각합니다. – Pete

+0

@mister_rampage : 좋은 지적입니다. 나는 내 대답을 간단하게 바꿀 것이다. – cybersam

+0

좋은 답변입니다. 감사합니다 v 많이. 당신의 설명이 정말 도움이됩니다. 여기에 제가 사용한 게임이 있습니다 - http://fionnbharra.github.io/biggersmaller/ – Finnnn