2013-03-25 76 views
1

我需要在AS3一個日曆,經常是這樣的:日曆的ActionScript 3

regular calendar

,這當日期被點擊:

clicked a date

我的基礎知識我想,但我不知道該從哪裏出發,我無法弄清楚我的代碼有什麼問題讓這些日子正常工作。

主要代碼:

package code { 

import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 


public class Main extends MovieClip { 

    private var days:Array = new Array(); 
    public var selectedDay:Day = null; 

    public function Main() { 
     // constructor code 
     var across: int = 7; 

     for(var i:int = 0; i < 31; i++) 
     { 
      var row:int = Math.floor(i/across); 
      var col:int = i % across; 

      var d:Day = new Day(); 
      addChild(d); 
      d.x = col * (d.width); 
      d.y = row * (d.height); 
      days.push(d); 
      d.addEventListener(MouseEvent.CLICK, onClick); 
     } 



    } 

    public function onClick(e:MouseEvent):void{ 
     if (selectedDay == null){ 
      trace("meow!"); 
      days[1].gotoAndStop(2); 
     } 
     else if (selectedDay != null){ 

     } 
} 
} 

} 

和天代碼:

package code { 

import flash.display.MovieClip; 
import flash.text.TextField; 


public class Day extends MovieClip { 

    public var weekday_txt:TextField; 
    public var date_txt:TextField; 

    public function Day() { 
     // constructor code 
     for (var num:int = 0; num < 7; num++){ 

      var weekDays:Array = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); 
      weekday_txt.text = weekDays[num]; 
      //trace(weekDays[num]); 
      date_txt.text = ""+42; 
     } 
    } 
} 

} 

感謝您的幫助!

+1

我看到的代碼是好的,但我不知道是什麼問題,只是有一個問題,你能更具體嗎?遇到錯誤或根本無法使事情運行? – shaunhusain 2013-03-26 02:24:11

+1

我的日子編號系統只會在星期六給他們加上標籤,並且在下面的答案中加入額外的添加和編輯代碼,隨地吐痰出錯。在此之前,我只能讓陣列中的第一個實體點亮。 – 2013-03-26 05:54:25

回答

1

我改寫了你的類,因爲它是個更容易一個試圖解釋的邏輯錯誤:

import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.MouseEvent; 

public class Main extends MovieClip{ 

    private var days:Array = new Array(); 
    private var selectedDay:Day; 

    public function Main() { 
     stop(); 

     days = new Array(); 
     var weekDayTitles:Array = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); 

     var across:int = 7; 
     for (var i:int=0; i<31; i++){ 
      var row:int=Math.floor(i/across); 
      var col:int = i%7; 

      var d:Day = new Day(); 
      addChild(d); 
      d.x = col * (d.width); 
      d.y = row * (d.height); 
      d.setWeekDay(weekDayTitles[col]); 
      d.setDate(""+(i+1)); 
      days.push(d); 
      d.addEventListener(MouseEvent.CLICK, onClick); 
     } 
    } 

    public function onClick(e:MouseEvent):void{ 
     if (selectedDay != null){ 
      selectedDay.setAsUnSelected(); 
     } 
     selectedDay = Day(e.target); 
     selectedDay.setAsSelected(); 
    } 

}// Class 

,一日之類應該是這樣的:

// make sure this class is linked to a movieclip 
// in your library that has two frames 
// frame 1 = "unselected" 
// frame 2 = "selected"; 

// make sure to have 2 textfields in the linked symbol, one named : "weekdayTxt" and the other "dateTxt" 

public class Day extends MovieClip{ 

    public var weekday_txt:TextField; 
    public var date_txt:TextField; 

    public function Day() { 
     gotoAndStop(1); 
     weekday_txt = this.weekdayTxt; 
     date_txt = this.dateTxt; 
    } 

    public function setWeekDay(_day:String):void{ 
     weekday_txt.text = _day; 
    } 

    public function setDate(_date:String):void{ 
     day_txt.text = _date; 
    } 

    public function setAsSelected():void{ 
     this.gotoAndStop(2); 
    } 

    public function setAsUnSelected():void{ 
     this.gotoAndStop(1); 
    } 

}// Class 
0

嗯,我認爲你確實有這個問題,但我注意到你的onClick方法總是定位數組的第二天並將其設置爲第2幀,因爲它看起來不像你初始化「selectedDay」 ...:

public function onClick(e:MouseEvent):void{ 
    if (selectedDay == null){ 
     trace("meow!"); 
     days[1].gotoAndStop(2); 
    } 
    else if (selectedDay != null){ 

    } 
} 

它可能會幫助改變功能:

public function onClick(e:MouseEvent):void{ 
    if (selectedDay != null){ 
     selectedDay.gotoAndStop(1); //assuming frame 1 is an "unselected" state 
    } // you don't really need an else, if you are not going to do anything in it 
    selectedDay = e.target; 
    selectedDay.gotoAndStop(2); 
} 


public function getSelectedDayInfo():Object{ 
    var _object = new Object(); 
    _object.weekday = "nothing selected"; 
    _object.date = "nothing selected"; 
    if(selectedDay != null){ 
     _object.weekday = selectedDay.weekday_txt.text; 
     _object.date = selectedDay.date_txt.text; 
    } 
    return (_object); 
} 

希望幫助...

+0

半幫助!我沒有收到空對象引用錯誤,沒有任何東西點亮。此外,在一個不相關的說明,我無法弄清楚如何標記星期的日子,因爲我的代碼是不工作 – 2013-03-26 05:43:05

+0

在問候你每天一班,注意函數日[構造]將會被調用爲每個實例你實例化的類。因此,對於每個「日」,它將循環7並將其設置爲陣列中的最後一天。的 ,而不是把這些代碼在構造函數中,做一個獨立的功能,並從父影片剪輯調用它......我會提出了一些代碼... – Mike 2013-03-26 19:01:50