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

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

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

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
По умолчанию Каким образом через event listener передать переменную в функцию?

У меня есть "создатель частиц", и мне их нужно в определенный момент (к примеру, когда полностью частица выполнит Tween _fly) удалять. Но, как вы видите, в коде невозможно с листенером передать тот же спрайт в новую функцию, чтобы он уже работал с ней. Есть идеи, как это выполнить? Полный код с возможностью теста вот:

Код AS3:
import fl.transitions.*;
import fl.transitions.easing.*;
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
var c_radius:Number = new Number();
var _ypos:Number = new Number();
var ground:Number = new Number();
var howlong:Number = new Number();
var howlongdrop:Number = new Number();
ground = stage.stageHeight;
addEventListener(Event.ENTER_FRAME, spawn);
function spawn(n:Event)
{
	howlongdrop = Math.ceil(Math.random() * 300) / 100;
	howlong = Math.ceil(Math.random() * stage.stageWidth);
	_ypos = Math.ceil(Math.random() * stage.stageHeight);
	c_radius = Math.ceil(Math.random() * 20);
 
	var sprite:Sprite = new Sprite();
	sprite.graphics.beginFill(0x000000, 2);
	sprite.graphics.drawCircle(0,0,c_radius);
	sprite.graphics.endFill();
	sprite.y = _ypos;
	sprite.alpha = Math.ceil(Math.random() * 100) / 100;
	addChild(sprite);
	behave(sprite, ground, howlong, howlongdrop);
}
 
function behave(i:Sprite, groundy:Number, howlongfly:Number, howlongdrop2:Number)
{
	var _fly:Tween = new Tween(i,"x",Strong.easeOut,i.x,i.x + howlongfly,2,true);
	var drop:Tween = new Tween(i,"y",Bounce.easeOut,i.y,groundy,howlongdrop2,true);
	_fly.addEventListener(TweenEvent.MOTION_FINISH, dissapear);
}
 
 
function dissapear(n:Event) {
//здесь мне надо уменьшать alpha спрайта i из функции behave а после удалять child.
//Но как мне получить доступ к i? всунуть в параметры кроме n:Event сюда его никак нельзя!
}

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
А у Tween нет ссылки для кого он работает? А у TweenEvent?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 06.08.2012, 17:56
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 3  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Есть .currentObject у TweenEvent. Он возвращает Tween (то бишь _fly перелетает плавно в функцию dissapear)
У Tween-а есть .obj, но я к нему даже если присвою этот Tween чему-то не могу достучаться. Куча ошибок в выводе висит.

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

Регистрация: May 2010
Сообщений: 543
я более чем уверен, что у TweenEvent есть свойства target и currentTarget.
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 06.08.2012, 18:13
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 5  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
.currentTarget у TweenEvent возвращает просто объект Tween. А мне нужно доступ к спрайту i, которым управляет Tween. Все намного сложнее)

Добавлено через 7 минут
Ура! Я исправил и теперь все исчезает. Остался один момент. Я думал это связано с бесконечным спавном частиц. Оказывается...
Почему у меня все зависает? К примеру Tween около 98 из 100 шаров просто застывает? Я думал это графический глюк а это программный.
Вот исправленный код, можете сами протестить у себя.

Код AS3:
import fl.transitions.*;
import fl.transitions.easing.*;
import flash.events.Event;
import flash.display.MovieClip;
import flash.display.Sprite;
var c_radius:Number = new Number();
var _ypos:Number = new Number();
var ground:Number = new Number();
var howlong:Number = new Number();
var howlongdrop:Number = new Number();
var maxnumber:Number = new Number(100);
var totalnumber:Number = new Number(0);
ground = stage.stageHeight;
addEventListener(Event.ENTER_FRAME, spawn);
function spawn(n:Event)
{
	howlongdrop = Math.ceil(Math.random() * 300) / 100;
	howlong = Math.ceil(Math.random() * stage.stageWidth);
	_ypos = Math.ceil(Math.random() * stage.stageHeight);
	c_radius = Math.ceil(Math.random() * 20);
	if (totalnumber < maxnumber)
	{
		var sprite:Sprite = new Sprite();
		sprite.graphics.beginFill(0x000000, 2);
		sprite.graphics.drawCircle(0,0,c_radius);
		sprite.graphics.endFill();
		sprite.y = _ypos;
		sprite.alpha = Math.ceil(Math.random() * 100) / 100;
		addChild(sprite);
		totalnumber++;
		behave(sprite, ground, howlong, howlongdrop);
	}
}
 
function behave(i:Sprite, groundy:Number, howlongfly:Number, howlongdrop2:Number)
{
	var _fly:Tween = new Tween(i,"x",Strong.easeOut,i.x,i.x + howlongfly,2,true);
	var drop:Tween = new Tween(i,"y",Bounce.easeOut,i.y,groundy,howlongdrop2,true);
	_fly.addEventListener(TweenEvent.MOTION_FINISH, dissapear);
}
 
 
function dissapear(n:TweenEvent)
{
	var __z:Object;
	__z = n.currentTarget;
	totalnumber--;
	removeChild(__z.obj);
}

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
http://help.adobe.com/ru_RU/FlashPla...ons/Tween.html
Цитата:
obj : Object = null
Целевой объект с анимацией движения.
Не оно?

Код AS3:
function dissapear(event:TweenEvent)
{
trace(event.currentTarget.obj);
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 06.08.2012, 18:23
MINASTIS вне форума Посмотреть профиль Отправить личное сообщение для MINASTIS Посетить домашнюю страницу MINASTIS Найти все сообщения от MINASTIS
  № 7  
Ответить с цитированием
MINASTIS
 
Аватар для MINASTIS

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Я могу ошибаться, но возможно у меня где-то конфликт с именами у Tween. Т.е. когда одна из частиц заканчивает движение внезапно все застывают. Не понимаю, где косяк.

Добавлено через 38 секунд
Gbee да, вы правы Исправил. Проблема теперь в застывании всех частиц.

Добавлено через 1 час 33 минуты
Немного погуглив узнал о Garbage Collection, великолепной помойке, месте, куда флеш скидывает все мои твины, решив, что я насилую без перебоя то ли sprite переменную то ли _fly и drop.

В общем по факту - нельзя все это как в AS2 через одну ссылку (ей является sprite, после i) столько переменных проносить. Метод "групповухи" теперь не работает.

Решение я нашел, судя по всему - надо использовать массив, где будут храниться эти спрайты. Но у меня появился вопрос. Я могу ошибаться, но разве в массиве можно использовать спрайты?

И еще, может я зря использую Tween для этой анимации и есть способ проще? А то я в интернете натыкаюсь постоянно на то, что Tween вшитий во флеш имеет свои баги и вообще лучше всего качать сборки Tween класса(Tweener и другие).

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

Регистрация: Jul 2007
Сообщений: 393
В массиве можно спрайты, можно в типизированном массиве vector спрайты, не вопрос.

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

Регистрация: Jan 2006
Адрес: Сургут
Сообщений: 897
Отправить сообщение для MINASTIS с помощью Skype™
Сделал массив спрайтов. Не помогло. Зависание повторяется.
Попробую Твины все в каждый массив засунуть. Будет массив Спрайта к примеру particles [1] и ему будут сопоставлены массивы Твинов _flymassive[1] и dropmassive[1].

Честно, я не знаю, что я делаю, но теоретически это сможет сэкономить как-то и оптимизировать все.
Вы вообще сталкивались с зависанием в Tween классе?
Гугл говорит что это частая проблема для него. Только решения от одного к другому мистические и больше похожи на "подпрыгни дерни за ухо и вроде пройдет".

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Используйте проверенные твины (например TweenNano от greensock) и храните на них ссылки, чтобы GC не убивал объекты.
__________________
тут я

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

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

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


 


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


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