Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.09.2011, 20:07
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 1  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
По умолчанию Календарь

Здравствуйте, есть класс календаря. По дням можно щелкать. Задача : через trace вывести дату на которую нажал:

Делаю так:
Код AS3:
addEventListener(MouseEvent.CLICK,onDate); // инициируем нажатие на иконку.
private function onDate (e:MouseEvent):void {
	var today = new Date();
		trace ( _currentMonth+1); // месяц
		trace ( _currentYear); // год
		trace (  today.getDate() );
 
			}
Месяц и год передает правильно.Но как передать дату, на которую щелкнул, ведь today.getDate() передаст сегоднящнюю! Помогите пожалуйста продумать этот момент )

Старый 11.09.2011, 20:19
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Вам сюда.

Старый 11.09.2011, 20:38
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 3  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
Спасибо, но я там смотрел и мне ничего не дало в плане, как получить число именно то на которое я нажал в календаре.
В этом и дело, что с месяцем и годом легче, потому что отображать текущий надо, а вот как с днем появляются вопросы

Старый 11.09.2011, 20:47
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Чего? Не понятно куда вы там нажимаете. Дата текущего месяца берется из свойства date:

date - свойство : День месяца по местному времени (целое число от 1 до 31), заданный объектом Date. Местное время определяется операционной системой, в которой запущена среда выполнения Flash.

Старый 11.09.2011, 21:21
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 5  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
Нажимаю на ячейку.
Код AS3:
//Эта функция которая добавляет текстовое поле в ячейку, ей передается номер ячейки ( номер дня)
function attachTextField(it:Number):void {
	var textDate:TextField = new TextField();
	textDate.mouseEnabled = false;
	textDate.selectable = false;
	textDate.text = it.toString();
	textDate.width = 20;
	textDate.height = 20;
	_dates[tempNumber][2].addChild(textDate);
	textDate.x = -1;
	textDate.y = 1;
			}

Старый 11.09.2011, 23:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
насколько можно судить по отрывкам кода, в таком вот примитивном раскладе это будет что-то типа
Код AS3:
private function onDate(e:MouseEvent):void 
{
	trace( "date : " + (e.target as TextField ).text);
}
зы: имо любой уважающий себя календарь должен иметь хотя бы геттер selectedDate для этих целей
но это так - вообще, к делу не относится

Старый 13.09.2011, 18:34
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 7  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
Код брал с сайта demiart и вот код класса :
Код AS3:
package {
 
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	import com.greensock.*;
	import com.greensock.easing.*;
 
	public class Calendar extends MovieClip {
 
		public static const CHANGEDATE:String = 'changedate';//константа для имени события
		public static const XGRID:Number = 12;//координаты сетки из ячеек с датами и панельки с днями недели
		public static const YGRID:Number = 95;
		public static const YDAYS:Number = 60;
		public static const BETWEENCELLS:Number = 5;//расстояние между ячейками
 
		private var _dateObject:Date;//экземпляр нужен для получения значений текущей даты, дня недели, года
 
		private var _currentDate:Number;//текущая дата
		private var _currentDay:Number;//текущий день недели
		private var _currentMonth:Number;//текущий месяц
		private var _currentYear:Number;//текущий год
		private var _days:Array;//массив для хранения названий дней недели
		private var _dates:Array;//массив для хранения дат
		private var _months:Array;//массив для хранения названий месяцев
		private var _daysinMonth:Array;//массив для хранения количества дней в месяце
 
		private var _nextMonthButton:NextMonthButton;//кнопки
		private var _prevMonthButton:PrevMonthButton;
		private var _nextYearButton:NextYearButton;
		private var _prevYearButton:PrevYearButton;
		private var _textCurrentMonth:TextField;//текстовое поле для названия месяца
		private var _textCurrentYear:TextField;//текстовое поле для значения года
		private var _formateTextMonthAndYear:TextFormat;//форматы для текстовых полей
		private var _formateTextDate:TextFormat;
		private var _formateTextDays:TextFormat;
 
		private var _startCell:Number;//ячейка с сегодняшней датой
 
		public function Calendar() {
			init();
		}
 
		private function init():void {
 
			_dateObject = new Date();
			_currentDate = _dateObject.getDate();
			_currentDay = _dateObject.getDay();
			_currentYear = _dateObject.getFullYear();
			_currentMonth =	_dateObject.getMonth();
			_days = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс']
			_months = ["январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"];
			_daysinMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
 
			buildHeader();//создаем текстовые поля для названия месяца, года; создаем панельку с днями недели
			buildGrid();//создаем сетку из ячеек с датами
			showCurrentDate();//изменяем сетку в соответствии с видом текущего месяца
 
			//когда пользователь кликает по кнопкам	для изменения даты или года (см метод onClick()),
			//мы отправляем событие Calendar.CHANGEDATE, которое обрабатывает метод onChangeDate()
			addEventListener(MouseEvent.CLICK, onClick);
			addEventListener(Calendar.CHANGEDATE, onChangeDate);
			addEventListener(MouseEvent.CLICK,onDate); // по нажатию на иконку дату перемещаем.
					}
 
		private function buildHeader():void {
 
			//создаем экземпляр текстового поля с присоединенным шрифтом, чтобы
			//этот шрифт можно было использовать в нашем ролике
			var textEmbed:TextEmbed = new TextEmbed();
 
			//создаем формат текстовых полей для названия месяца и значения года
			_formateTextMonthAndYear = new TextFormat();
			_formateTextMonthAndYear.color = 0x333333;
			_formateTextMonthAndYear.font = 'Tahoma';
			_formateTextMonthAndYear.size = '16';
			_formateTextMonthAndYear.bold = true;
			_formateTextMonthAndYear.align = TextFormatAlign.CENTER;
 
			//создаем формат текстового поля для значений даты
			_formateTextDate = new TextFormat();
			_formateTextDate.color = 0xffffff;
			_formateTextDate.font = 'Tahoma';
			_formateTextDate.size = '13';
			_formateTextDate.bold = true;
			_formateTextDate.align = TextFormatAlign.CENTER;
 
			//создаем формат текстового поля для значений дней недели
			_formateTextDays = new TextFormat();
			_formateTextDays.color = 0xffffff;
			_formateTextDays.font = 'Tahoma';
			_formateTextDays.size = '14';
			_formateTextDays.bold = true;
			_formateTextDays.align = TextFormatAlign.CENTER;
 
			//создаем текстовое поле для названия месяца
			_textCurrentMonth = new TextField();
			_textCurrentMonth.selectable = false;
			_textCurrentMonth.defaultTextFormat = _formateTextMonthAndYear;
			_textCurrentMonth.embedFonts = true;
			_textCurrentMonth.x = 23;
			_textCurrentMonth.y = 25;
			_textCurrentMonth.width = 90;
			_textCurrentMonth.height = 40;
			_textCurrentMonth.text = _months[_currentMonth];
			addChild(_textCurrentMonth);
 
			//создаем текстовое поле для значения года
			_textCurrentYear = new TextField();
			_textCurrentYear.embedFonts = true;
			_textCurrentYear.selectable = false;
			_textCurrentYear.defaultTextFormat = _formateTextMonthAndYear;
			_textCurrentYear.x = 137;
			_textCurrentYear.y = 25;
			_textCurrentYear.width = 80;
			_textCurrentYear.height = 40;
			_textCurrentYear.text = _currentYear.toString();
			addChild(_textCurrentYear);
 
			//создаем ячейки с названиями дней недели
			for (var i:int = 0; i < _days.length; i++) {
				var bgDay:BgDay = new BgDay();
				addChild(bgDay);
				bgDay.x = i * (bgDay.width + BETWEENCELLS) + XGRID;
				bgDay.y = YDAYS;
 
				var textDay:TextField = new TextField();
				textDay.mouseEnabled = false;
				textDay.selectable = false;
				textDay.text = _days[i];
				textDay.width = 30;
				textDay.height = 30;
				textDay.embedFonts = true;
				textDay.setTextFormat(_formateTextDays);
				bgDay.addChild(textDay);
				textDay.x = -3;//эти значения получаем опытным путем :)
				textDay.y = 1;
 
			}
 
 
			//создаем кнопки для изменения месяцев и лет
			_nextMonthButton = new NextMonthButton();
			_nextMonthButton.stop();
			_nextMonthButton.x = 115;
			_nextMonthButton.y = 33;
			_nextMonthButton.buttonMode = true;
			_nextMonthButton.useHandCursor = true;
			addChild(_nextMonthButton);
 
			_prevMonthButton = new PrevMonthButton();
			_prevMonthButton.stop();
			_prevMonthButton.x = 15;
			_prevMonthButton.y = 33;
			_prevMonthButton.buttonMode = true;
			_prevMonthButton.useHandCursor = true;
			addChild(_prevMonthButton);
 
			_nextYearButton = new NextYearButton();
			_nextYearButton.stop();
			_nextYearButton.x = 209;
			_nextYearButton.y = 33;
			_nextYearButton.buttonMode = true;
			_nextYearButton.useHandCursor = true;
			addChild(_nextYearButton);
 
			_prevYearButton = new PrevYearButton();
			_prevYearButton.stop();
			_prevYearButton.x = 137;
			_prevYearButton.y = 33;
			_prevYearButton.buttonMode = true;
			_prevYearButton.useHandCursor = true;
			addChild(_prevYearButton);
		}
 
		private function onChangeDate(e:Event):void {
			clearGrid()//убираем старую сетку
			buildGrid();//делаем новую
			showCurrentDate();
		}
 
		private function clearGrid():void {
 
			//удаляем все ячейки
			_dates = null;
			while (getChildAt(numChildren-1) is BgDate) {
				removeChild(getChildAt(numChildren-1));
			};
 
			//создаем новый объект Date, со значениями года и месяца, которые выбрал пользователь
			_dateObject = new Date(_currentYear,_currentMonth, _currentDate); 
			_currentDate = _dateObject.getDate();
			_currentDay = _dateObject.getDay();
			_currentYear = _dateObject.getFullYear();
			_currentMonth =	_dateObject.getMonth();
		}
 
		private function showCurrentDate():void {
 
			//небольшая проверка на високосный год, если год не високосный, то в феврале 28 дней
			_daysinMonth[1] = 28;
 
			//если високосный - 29
			if ((_currentYear / 4 - Math.floor(_currentYear / 4) == 0)) {
				_daysinMonth[1] = 29;
			}
 
			if (_currentYear / 100 - Math.floor(_currentYear / 100) == 0 &&
			_currentYear / 400 - Math.floor(_currentYear / 400) != 0) {
				_daysinMonth[1] = 28;
			}
 
			//ищем в сетке ближайшую ячейку, день недели которой совпадает со значением _currentDay
			for (var i:Number = _currentDate - 1; i < _dates.length - 1; i++) {
				if (_dates[i][1] == _currentDay) {
					_startCell = i;
					_dates[i][2].gotoAndStop(2);
					break;
				}
			}
 
			var tempNumber:Number;
			tempNumber = _startCell;
 
			//функция добавляет текстовое поле в ячейку
			function attachTextField(it:Number):void {
				var textDate:TextField = new TextField();
				textDate.mouseEnabled = false;
				textDate.selectable = false;
				textDate.text = it.toString();
				textDate.width = 30;
				textDate.height = 30;
				textDate.embedFonts = true;
				textDate.setTextFormat(_formateTextDate);
				_dates[tempNumber][2].addChild(textDate);
				textDate.x = -3;//эти значения получаем опытным путем :)
				textDate.y = 1;
			}
 
			//добавляем текстовые поля к ячейкам от текущей даты до первого числа месяца
			for (var j:Number = _currentDate; j > 0; j--) {
				attachTextField(j);
				tempNumber--;
			}
 
			//восстанавливаем значение tempNumber
			tempNumber = _startCell;
 
			//добавляем текстовые поля к ячейкам от текущей даты до последнего числа месяца
			for (var k:Number = _currentDate; k <= _daysinMonth[_currentMonth]; k++) {
				attachTextField(k);
				tempNumber++;
			}
 
			//удаляем ячейки без текстовых полей из списка отображения, хотя можно этого и не делать,
			//а просто изменять их внешний вид
			for (var l:Number = 0; l < _dates.length ; l++) {
				if (_dates[l][2].numChildren==1) {
					removeChild(_dates[l][2]);
				}
			}
]
Дальше продолжение этого же класса

Старый 13.09.2011, 18:35
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 8  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
Код AS3:
//создаем сетку из ячеек дат
		private function buildGrid():void {
		_dates = new Array();
		var it:Number = 0;
		for (var i:Number = 0; i < 6; i++) {
		for (var j:Number = 0; j <= 7; j++) {
				if (j == 7) {
					break;
				}
					it++;
					var dateOfMonth:Number;
					dateOfMonth = it;
					var dayOfWeek:Number;
					dayOfWeek = j + 1;
					if (dayOfWeek == 7) {
						dayOfWeek = 0;
					}
				var bgDate:BgDate = new BgDate();
					addChild(bgDate);
					bgDate.x = j * (bgDate.width + BETWEENCELLS) + XGRID;
					bgDate.y = i * (bgDate.height + BETWEENCELLS) + YGRID;
 
					_dates.push([dateOfMonth, dayOfWeek, bgDate]);
				}
			}
		}
 
 
			//обработчик события MouseEvent.CLICK - здесь меняем месяцы и даты
		//и отправляем событие Calendar.CHANGEDATE
		private function onClick(e:MouseEvent):void {
 
			if (e.target is NextMonthButton || e.target is PrevMonthButton
			||e.target is NextYearButton || e.target is PrevYearButton) {
 
				if (e.target is NextMonthButton) {
					_currentMonth++;
					if (_currentMonth == 12) {
						_currentMonth = 0;
						_currentYear++;
						_textCurrentYear.text = _currentYear.toString();
					}
					_textCurrentMonth.text = _months[_currentMonth];
				} else if (e.target is PrevMonthButton) {
					_currentMonth--;
					if (_currentMonth == -1) {
						_currentMonth = 11;
						_currentYear--;
						_textCurrentYear.text = _currentYear.toString();
					}
					_textCurrentMonth.text = _months[_currentMonth];
				}
 
				if (e.target is NextYearButton) {
					_currentYear++;
					_textCurrentYear.text = _currentYear.toString();
				} else if (e.target is PrevYearButton) {
					_currentYear--;
					_textCurrentYear.text = _currentYear.toString();
				}
 
				dispatchEvent(new Event(CHANGEDATE));
			}
 
		}
	private function onDate (e:MouseEvent):void {
		trace ( _currentMonth+1);
		trace ( _currentYear);
		trace (_months[_currentMonth]);
	    trace( ); //тут вывести номер дня
	}
	}
 
}
в функции onDate надо вывести через trace день на иконку которого нажал.

Старый 13.09.2011, 19:19
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 9  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
что-то мне подсказывает что это
Код AS3:
_currentDay
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 13.09.2011, 19:25
dr1emaver вне форума Посмотреть профиль Отправить личное сообщение для dr1emaver Найти все сообщения от dr1emaver
  № 10  
Ответить с цитированием
dr1emaver

Регистрация: Aug 2011
Сообщений: 24
_currentDay - это сегодняшний день, а мне нужен тот день на иконку которого я нажал...

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:11.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:11.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.