Проблема с Math.sin () заключается в том, что я не могу найти способ управления приращением. Тем не менее, это кажется большим количеством кода для такой простой концепции. Есть идеи по улучшению?
package { // by default, iterating the next() function will return 1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,2,3,4, etc
public class valueWave {
private var maxno,inc,startno,offset,removeDuplicates,internalNum //internalNum is always>0
private var goingUp=true
public var num //latest value
public function valueWave($min:Number=0, $max:Number=10, $increment:Number=1, $startno:Number=0, $removeDuplicates=true) {
if($max<$min){
trace("valueWave ERROR: max must be greater than min")
return
}
maxno=$max-$min
inc=$increment
startno=$startno
internalNum=$startno
num=$startno
offset=$min
removeDuplicates=$removeDuplicates
}
public function next(){
if(maxno==0){return(0);} //disable if max and min are the same
if(goingUp){//going up:
if(internalNum <= maxno-inc){
internalNum+=inc
}else{//invert:
goingUp=false
if(removeDuplicates) internalNum-=inc
}
}else{//going down:
if(internalNum >= inc){
internalNum-=inc
}else{//invert:
goingUp=true
if(removeDuplicates) internalNum+=inc
}
}
upd()
return(num)
}
public function reset(){
internalNum=startno
goingUp=true
}
private function upd(){
num=internalNum+offset
}
}
}
UPDATE:
Окончательное решение, упакованное в простой класс с инструкциями, можно найти здесь:
http://blog.crondesign.com/2011/07/as3-wave-of-values-class-function.html