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

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

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

Регистрация: May 2010
Сообщений: 7
По умолчанию вытащить значение переменной из функции

есть функция в которой определена переменная next:
Код:
public function onGetTime(t:String):void {
  	var next:Date = new Date(t);
  	var ed:TextField=evendate;
  	ed.text+=new Date(t);
  	trace('', t);
  	trace('', next);
  	
  }
var nextsession:Date = ?;
Подскажите как переменной nextsession присвоить значение другой переменной next из функции, т.к. за пределами функции переменная next не определена.
может не правильно сформулировал вопрос, во флеше я новичек.

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

Регистрация: Oct 2009
Сообщений: 112
Записей в блоге: 1
ну а почему просто next не сделать глобальной?

Код AS3:
var next:Date;
public function onGetTime(t:String):void {
  	next = new Date(t);
  	var ed:TextField=evendate;
  	ed.text+=new Date(t);
  	trace('', t);
  	trace('', next);
 
  }
var nextsession:Date = next;

Старый 23.05.2010, 17:49
Anti вне форума Посмотреть профиль Отправить личное сообщение для Anti Найти все сообщения от Anti
  № 3  
Ответить с цитированием
Anti

Регистрация: May 2010
Сообщений: 7
сделал так
Код AS3:
var next:Date;
public function onGetTime(t:String):void {
	next = new Date(t);
	var ed:TextField=evendate;
	ed.text+=new Date(t);
	trace('', t);
	trace('', next);
}
var nextsession:Date = next;
не получилось
Код:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
	at Timer/frame1()
 May 28 07:00:00 GMT+0000 2010
 Fri May 28 10:00:00 GMT+0300 2010
в общем немного объясню суть, может это можно сделать гораздо проще:
из файла php передается значение переменной:
May 28 07:00:00 GMT+0000 2010 - это дата события в формате UTC
next = new Date(t);// в данном случае берет эту строку и преобразует её с учетом часового пояса пользователя в Fri May 28 10:00:00 GMT+0300 2010

дальше идет код таймера, в котором первой строчкой определялась дата события
var nextsessionate = new Date(Date.UTC(2010, 04, 28, 7, 0, 0, 0));// если забить руками, то все работает, но мне это не подходит, нужно чтобы переменной nextsession=next

Добавлено через 11 минут
а если еще проще сказать, то мне необходимо данные t:String загнать в глобальную переменную
Код AS3:
var nextsession:Date=new Date(t);
только проблема в том, что переменная t, как и все переменные функции onGetTime действуют только в пределах этой фонкции. Подозреваю что это сделать просто, только ума пока не хватает..

Старый 23.05.2010, 18:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Сделать функцию возвращающей значение через return. Как вариант.
__________________
тут я


Последний раз редактировалось КорДум; 23.05.2010 в 18:45.
Старый 23.05.2010, 19:04
Anti вне форума Посмотреть профиль Отправить личное сообщение для Anti Найти все сообщения от Anti
  № 5  
Ответить с цитированием
Anti

Регистрация: May 2010
Сообщений: 7
Можно пример на моем коде? Не совсем допонял.

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

Регистрация: Oct 2009
Сообщений: 112
Записей в блоге: 1
Инетерсно в какой строчке ошибка... подозреваю что в var nextsessionate = next;

Код AS3:
var nextsession:Date;
public function onGetTime(t:String):void {
	nextsession = new Date(t);
	var ed:TextField=evendate;
	ed.text+=new Date(t);
	trace('', t);
	trace('', nextsession);
}
а если так?


Последний раз редактировалось HotIceCream; 23.05.2010 в 19:08.
Старый 23.05.2010, 19:10
Anti вне форума Посмотреть профиль Отправить личное сообщение для Anti Найти все сообщения от Anti
  № 7  
Ответить с цитированием
Anti

Регистрация: May 2010
Сообщений: 7
Цитата:
Сообщение от HotIceCream Посмотреть сообщение
Инетерсно в какой строчке ошибка... подозреваю что в var nextsessionate = next;

Код AS3:
var nextsession:Date;
public function onGetTime(t:String):void {
	nextsession = new Date(t);
	var ed:TextField=evendate;
	ed.text+=new Date(t);
	trace('', t);
	trace('', nextsession);
}
а если так?
не идет, внутри функции nextsession имеет значение, за пределами null, а необходимо вытащить значение переменной именно из функции. И мне как раз понятно, почему значение 0, потому что значение переменной присвоено внутри функции и за её пределами на эту переменную не распространяется.


Последний раз редактировалось Anti; 23.05.2010 в 19:18.
Старый 23.05.2010, 19:18
HotIceCream вне форума Посмотреть профиль Отправить личное сообщение для HotIceCream Найти все сообщения от HotIceCream
  № 8  
Ответить с цитированием
HotIceCream
 
Аватар для HotIceCream

Регистрация: Oct 2009
Сообщений: 112
Записей в блоге: 1
нет, не поэтому.
Что вы дальше делаете с nextsession ? Смысл в том, что вы скорее всего обрабатываете nextsession уже дальше еще до того, как вызовется функция onGetTime

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
переменная = функция(передача параметров);
 
функция (передача параметров):ТипВозвращаемогоЗначения {
	что-то делает;
	return локальная переменнаяЭтойФункции;
}
Но это, наверно, не для вашего случая.
__________________
тут я

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

Регистрация: May 2010
Сообщений: 7
Цитата:
Сообщение от HotIceCream Посмотреть сообщение
нет, не поэтому.
Что вы дальше делаете с nextsession ? Смысл в том, что вы скорее всего обрабатываете nextsession уже дальше еще до того, как вызовется функция onGetTime
дальше идет код таймера обратного отсчета, которому нужно значение nextsession - это время события до которого мы считаем. но этот код прописан в кадре таймлайн
Код AS3:
var now:Date = new Date();
// Conditional to snap to frame 3 if it is xmas or past xmas
if (now >= nextsession) {
	gotoAndStop(3);
}
// Set the difference between the two date and times in milliseconds
var timeDiff:Number = nextsession.getTime() - now.getTime();
//Convert the timeDiff(which is in milliseconds) into regular seconds-minutes-hours-days	
//The Math.floor is the closest rounded integer that is less than or equal to the decimal number
var milliseconds:Number = Math.floor(timeDiff / 001);
var seconds:Number = Math.floor(milliseconds / 1000);
var minutes:Number = Math.floor(seconds / 60);
var hours:Number = Math.floor(minutes / 60);
var days:Number = Math.floor(hours / 24);	
// Set the remainder of the division vars above
hours %= 24;
minutes %= 60;
seconds %= 60;
milliseconds %= 1000;
// String all vars together for display
var timeRemaining:String = "Days= " + days + "     Hours= " + hours + "     Minutes= " + minutes + "     Seconds= " + seconds +"      milliseconds= " + milliseconds;
var ms:String ="" + milliseconds;
var s:String ="" + seconds;
var m:String ="" + minutes;
var h:String ="" + hours;
var d:String ="" + days;
// Display everything in their dynamic text fileds
msString.text = ms;
sString.text = s;
mString.text = m;
hString.text = h;
dString.text = d;
timeString.text = timeRemaining;
now_txt.text = "now: " + now;
xmas_txt.text = "Xmas = " + nextsession;
а сама функция в классе Timer:
Код AS3:
package {
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.display.MovieClip;	
	import Amf; //--подключаем наш класс для взаимодействия
	import flash.display.Loader;
    import flash.events.*;
    import flash.net.URLRequest;
 
 
 
	public class Timer extends MovieClip {
 
		public var amf:Amf; //--обьявим переменную класса Amf для взаимодействия
		public function Timer() {
			amf= new Amf();
			amf.toamf("timer.getevent.getevent",onGetEvent); 
			//-- timer.getevent.getevent - сначало имя папки в которой скрипт php, дальше имя php скрипта, дальше имя вызываемой функции 
			amf.toamf("timer.getevent.gettime",onGetTime);
			//-- вторым параметром - функция в которую вернется ответ сервера
			amf.toamf("timer.getevent.getversioninfo",onGetVersion); 
		}
 
		public function onGetEvent(a:Object):void { 
			//var uint=0; 
			//var dx:uint=0;
 
			for each (var val:Array in a.serverInfo.initialData) {  //--в переменную val будет загонятся очередной значение из массива a, принцип: val=a[0]; val=a[1]; и тд
				var tf:TextField=newtext;
				var gp:TextField=gpname;
				var en:TextField=eventname;
				//tf.autoSize=TextFieldAutoSize.LEFT;
				tf.text='дата '+ val[0]+' '; //--запишем дату и пробел
				tf.text+=val[1]+' '; //--допишем заголовок и новую строку
				tf.text+=val[2]+'\n';
				tf.text+=val[3]+' ';
				tf.text+=val[4];
				gp.text+=val[1];
				en.text+=val[2];
 
 
				// загрузка изображения
				var imageLoader:Loader = new Loader();
				var theURL:String = "images/gp/"+ val[5] +".jpg";
				var imageRequest = new URLRequest(theURL);
			    imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			    imageLoader.load(imageRequest);
				function onComplete(evt:Event) {
		        addChildAt(imageLoader.content,0);
 
     			}
				addChild(tf);
				addChild(gp);
			}			
		}
 
				var next1:Date=new Date(2010, 04, 28, 7, 0, 0, 0);
				public function onGetTime(t:String):void {
  				next1 = new Date(t);
  				var ed:TextField=evendate;
  				ed.text+=new Date(t);
  				trace('', t);
  				trace('', next1);
				return t;
  				}
				//var nextsession = next1;
		var nextsession:Date = new Date(Date.UTC(2010, 04, 28, 7, 0, 0, 0));				
		//--пример получения простого значения из php
		function onGetVersion(s:String):void { //--из php нам отдается простая строка, значит и в параметрах функции мы укажем строку
			trace('Версия php сервиса:', s);
		}
 
	}
 
}
вот так, как сейчас работает, потому, что я прямо вписал цифрами дату события var nextsessionate = new Date(Date.UTC(2010, 04, 28, 7, 0, 0, 0));, но проблема в том, что дата не всегда будет одинакова, поэтому тут должна быть переменная, которая получает данные внутри функции onGetTime.

Добавлено через 5 минут
Цитата:
Сообщение от КорДум Посмотреть сообщение
Код AS3:
переменная = функция(передача параметров);
 
функция (передача параметров):ТипВозвращаемогоЗначения {
	что-то делает;
	return локальная переменнаяЭтойФункции;
}
Но это, наверно, не для вашего случая.
да тяжелый у меня случай, все что надо от скрипта получил, и текстовые поля и изображение, а вот переменную для даты события никак.

Добавлено через 6 минут
Из функции никак нельзя объявить переменную, чтоб она действовала во всем клипе?

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

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

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


 


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


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