2013-03-25 70 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