Actionscript 3 - 设置数字的倍数等于数字

时间:2012-07-02 23:46:01

标签: actionscript-3 function numbers slider threshold

我在Actionscript 3中编写了一个程序,该程序包含一个Slider,用于显示一年中的周和月,当您以“第2周第3周”或“第8周第2周”的格式向右滑动时。 我这样做了几个月:     function monthHandler(){

var a:Number = ((Math.ceil(aSlider.value/4))+1);
monthLabel.text = "Month" + String(a);

}

然而,对于同一个滑块(aSlider),我想每个月显示最多4周的周数。我知道我需要基本设置一个数字阈值;值1-4将显示周:1-4,但值5-8也必须显示周1-4。

我知道我可以通过使用if()循环的crapton来做到这一点,但我对编程相对较新,所以我假设有一种更有效的方法来做到这一点,而我只是不知道它。我环顾网页查看数字的倍数,并设置数字阈值,但似乎没有什么适合我的问题。

数周的当前代码是:

function weekHandler(){
var b:Number = ((Math.ceil(aSlider.value/12))+1);
weekLabel.text = "Week:" + String(b);
}

当我将滑块滑过物体的四分之一时,所有这一切都显示为1-4。就像我说的,我知道这不起作用,但我不知道该怎么做才能解决它。

2 个答案:

答案 0 :(得分:1)

基本上,我认为你想要的代码是:

var a:Number = (Math.ceil(aSlider.value) % 4) +1;
weekLabel.text = "Week" + String(a);

a%b = a的余数除以b ..

你不需要很多'if()'来计算它。

您可以使用(a - Math.floor(a/b)*b)< =但不要使用它,请使用a%b

答案 1 :(得分:0)

假设您的滑块有12个月,每月4周:

<强>个月:

var months:int = (int)(dateSlider.value / 4);

<强>周

var weeks:int = (dateSlider.value % 4) + 1;

Flash示例:

flash-slider

如果您有dateSlider Flash组件:

flash-date-slider

您可以更新dateText标签,例如:

import fl.events.SliderEvent;

dateSlider.addEventListener(SliderEvent.CHANGE, sliderChangeHandler);

function sliderChangeHandler(event:SliderEvent):void
{
    dateText.text = "Month: " + (int)(event.value / 4) + " " +
                    "Week: " + ((event.value % 4) + 1);
}


Flex示例:

month-0 month-6 month-12

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">

    <s:layout>
        <s:VerticalLayout />
    </s:layout>

    <s:Label text="Month: {(int)(dateSlider.value / 4)} Week: {(dateSlider.value % 4) + 1}" />

    <s:HSlider id="dateSlider"
               maximum="{(13 * 4) - 1}"
               snapInterval="1"
               stepSize="1" />

</s:Application>

应该指出的是,这种对日期的解释似乎很简陋,因为每月的实际周数为4.34812。

明确计算日期时间间隔将是有益的。