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

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

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

Регистрация: Feb 2015
Сообщений: 10
По умолчанию Как обратиться к клипам, котрые добавлены на сцену с помощью таймера?

Код AS3:
import flash.utils.Timer;
import flash.events.Event;
 
var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER,addRound);
myTimer.start();
 
 
function addRound(evt:TimerEvent)
{
	var myRound:Round = new Round  ;
 
	addChild(myRound);
 
	myRound.x = Math.random() * 400;
	myRound.y = Math.random() * 400;
        trace(myRound.numChildren);
 
}
 
stage.addEventListener(Event.ENTER_FRAME,roundRun);
function roundRun(evt1:Event)
{
//как обратиться к добавленным клипам?
}
trace(myRound.numChildren) выдает значение 1 при каждом срабатывании таймера.

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Значит в вашем myRound действительно только один ребёнок.
Наверно вы хотели узнать кол-во объектов myRound на сцене? Тогда просто
Код AS3:
trace(numChildren);

Старый 06.03.2015, 00:06
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
просто обратитесь, имя же зачем давали?
Правда код кривоват, так что поправлю на ваш вариант
Код AS3:
stage.addEventListener(Event.ENTER_FRAME,roundRun);
function roundRun(evt1:Event)
{
    if (myRound.stage != null)
          myRound.x += 1; //ваш объект начнёт движение
}
Добавлено через 3 минуты
хотя код совсем кривой у вас, попробую немного поправить
Код AS3:
import flash.utils.Timer;
import flash.events.Event;
 
var myRound:Round = new Round () ;
var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER,addRound);
myTimer.start();
 
 
function addRound(evt:TimerEvent)
{
 
	addChild(myRound);
 
	myRound.x = Math.random() * 400;
	myRound.y = Math.random() * 400;
        trace(myRound.numChildren);
 
}
 
stage.addEventListener(Event.ENTER_FRAME,roundRun);
function roundRun(evt1:Event)
{
    if (myRound.stage != null)
          myRound.x += 1; //ваш объект начнёт движение
}
Добавлено через 7 минут
тогда создаться один объект myRound - с ним и пробуйте играться, а если нужно много, то вот часть моего кода, использовал массив, код как есть
Код AS3:
package StartClass {
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.Timer;
	import flash.events.TimerEvent;
 
	public class StartDaubClass extends Sprite {
 
		public var inkwar_str: inkwar_mc = new inkwar_mc();
		private var str_daub_1: str_daub_1_mc = new str_daub_1_mc();
		private var str_daub_2: str_daub_2_mc = new str_daub_2_mc();
		private var str_daub_3: str_daub_3_mc = new str_daub_3_mc();
		private var str_btn: str_btn_mc = new str_btn_mc();
		public var str_daub_Array: Array = new Array(str_daub_1, str_daub_3, str_daub_2, str_btn);
 
		public function StartDaubClass(): void {
			this.addEventListener(Event.ADDED_TO_STAGE, fn_startTimer);
		}
 
		private var _timer: Timer = new Timer(600, 4);
 
		private function fn_startTimer(e: Event): void {
			this.removeEventListener(Event.ADDED_TO_STAGE, fn_startTimer);
			_timer.addEventListener("timer", fn_timer);
			inkwar_str.x = 800;
			inkwar_str.y = 300;
			this.addChild(inkwar_str);
			_timer.start();
		}
 
		private var i: Number = 0;
 
		private function fn_timer(e: TimerEvent): void {
			this.addChild(str_daub_Array[i]);
			if (i == 0) {
				str_daub_Array[i].x = 400;
				str_daub_Array[i].y = 500;
			}
			if (i == 1) {
				str_daub_Array[i].x = 1200;
				str_daub_Array[i].y = 350;
			}
			if (i == 2) {
				str_daub_Array[i].x = 900;
				str_daub_Array[i].y = 900;
			}
			if (i == 3) {
				str_daub_Array[i].alpha = 0.1;
				str_daub_Array[i].scaleX = 0.7;
				str_daub_Array[i].scaleY = 0.7;
				str_daub_Array[i].x = 800;
				str_daub_Array[i].y = 500;
				this.addEventListener(Event.ENTER_FRAME, fn_str_btn);
				this.removeEventListener("timer", fn_timer);
			}
			++i;
		}
 
		private function fn_str_btn(e: Event): void {
			if (str_daub_Array[3].alpha < 1) {
				str_daub_Array[3].alpha *= 1.04;
			} else {
				this.removeEventListener(Event.ENTER_FRAME, fn_str_btn);
			}
		}
	}
}

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
neonoviiwolf, ужас какой... Учите новичка никаким правилам оформления.
ИМХО, ваш код глаза режет. Я уже не раз отсылал вас читать конвенции, кажется.
Читай, код новичка причёсан лучше, чем ваш.

Добавлено через 1 минуту
По теме - просто объявление переменной вынесите за пределы функции.
И не надо морочить голову.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Jun 2014
Сообщений: 558
Это старый код, совсем не охота переписывать, если хочет, может и разберётся
Да и не такой уж и страшный, если учитывать как всё начинал

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Код AS3:
import com.greensock.plugins.RoundPropsPlugin;
import flash.utils.Timer;
import flash.events.Event;
 
var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER, addRound);
myTimer.start();
 
var rounds:Array = []; // создаём массив, куда будем помещать объекты Round
 
function addRound(evt:TimerEvent)
{
	var myRound:Round = new Round();
 
	addChild(myRound);
 
	myRound.x = Math.random() * 400;
	myRound.y = Math.random() * 400;
	trace(numChildren);
 
	rounds.push(myRound); //поместили очередной объект в массив
 
}
 
stage.addEventListener(Event.ENTER_FRAME, roundRun);
 
function roundRun(evt1:Event)
{
	//просто перебираем массив
	for (var i:int = 0; i < rounds.length; i++) 
	{
		var r:Round =  rounds[i];
		trace(r.x, r.y, r.width);
	}
}

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

Регистрация: Feb 2015
Сообщений: 10
Цитата:
Сообщение от samana Посмотреть сообщение
Код AS3:
***
	//просто перебираем массив
	for (var i:int = 0; i < rounds.length; i++) 
	{
		var r:Round =  rounds[i];
		trace(r.x, r.y, r.width);
	}
***
А не является ли такое решение избыточным? Ведь нам придется в каждом фрейме прогонять цикл . Возможно ли обойтись без цикла for?

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

Регистрация: Dec 2014
Сообщений: 312
Цитата:
Сообщение от Dogonyalka Посмотреть сообщение
Возможно ли обойтись без цикла for?
Можете обратиться только к нужному элементу в массиве.

Код AS3:
function roundRun(evt1:Event)
{
	var r:Round = rounds[3];
	trace(r.x, r.y, r.width);
}

Старый 09.03.2015, 17:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от Dogonyalka Посмотреть сообщение
Код AS3:
import flash.utils.Timer;
import flash.events.Event;
 
var myTimer:Timer = new Timer(1000);
myTimer.addEventListener(TimerEvent.TIMER,addRound);
myTimer.start();
 
 
function addRound(evt:TimerEvent)
{
	var myRound:Round = new Round  ;
 
	addChild(myRound);
 
	myRound.x = Math.random() * 400;
	myRound.y = Math.random() * 400;
        trace(myRound.numChildren);
 
}
 
stage.addEventListener(Event.ENTER_FRAME,roundRun);
function roundRun(evt1:Event)
{
//как обратиться к добавленным клипам?
}
trace(myRound.numChildren) выдает значение 1 при каждом срабатывании таймера.
Я просто хочу напомнить, что единственным способом обратиться к "добавленным клипам", а в общем смысле как к добавленным детям, можно лишь через "parent".getChildAt(index).
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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