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

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

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

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
все правильно... только так не получается...

есть curSprite
tcnm newSprite

функция запускающая смену содержимого перезаписывает newSprite после чего когда маска скрывает все curSprite = newSprite... первый раз работает но второй раз при перезаписи newSprite сразуже меняется и curSprite потомучто это ссылка ...

тоесть как я понял надо иметь newSprite1 и newSprite2 и поперемено в них записывать ссылки на новое содержимое, тогда должно заработать...

Старый 18.11.2009, 18:58
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 12  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
У окна есть свойства curSprite и newSprite.
  1. Когда не происходит смены, curSprite = newSprite, и этот спрайт добавлен в контейнер окна.
  2. Как только начинается смена, свойству newSprite присваиваем ссылку на новый спрайт. Скрываем его: newSprite.alpha = 0. Добавляем его в контейнер окна (addChild(newSprite)).
  3. Начинаем анимацию прозрачности, то есть curSprite.alpha от 1 до 0, newSprite.alpha от 0 до 1.
  4. Как только анимация закончилась, удаляем curSprite из контейнера (removeChild(curSprite)). Обновляем ссылку на текущий спрайт: curSprite = newSprite.
  5. Всё. При следующей замене идём на (1).


Последний раз редактировалось SamFR; 18.11.2009 в 19:04.
Старый 18.11.2009, 19:02
dsQuadro вне форума Посмотреть профиль Отправить личное сообщение для dsQuadro Посетить домашнюю страницу dsQuadro Найти все сообщения от dsQuadro
  № 13  
Ответить с цитированием
dsQuadro
 
Аватар для dsQuadro

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
так при действии 2 изменится и curSprite разве не так?
у меня срабатывает именно так...

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

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Нет, вы делаете что-то неправильно, раз у вас срабатывает так. Это – две независимые переменные, и они могут указывать на разные объекты.

Ищите, где вы портите curSprite. Или приведите код.

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

Регистрация: Feb 2008
Адрес: Москва
Сообщений: 238
Отправить сообщение для dsQuadro с помощью ICQ
тоесть по идее
newSprite = externalSprite;
curSprite = newSprite; // при этом действии создается ссылка не на newSprite а curSprite = externalSprite???

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

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
В первой строчке вы присваиваете переменной newSprite ссылку на объект, на который ссылается externalSprite. Теперь и newSprite ссылается на этот объект.

Во второй строчке вы присваиваете переменной curSprite ссылку на объект, на который ссылается newSprite. Теперь обе эти переменные ссылаются на один и тот же объект. Но, если теперь заставить newSprite ссылаться на какой-то другой объект, то на curSprite это никак не отразится.

Вотрая строчка должна быть выполнена после окончания анимации.

Аналогичный (но сильно упрощённый) код на С++ выглядел бы так:
Код:
Sprite* curSprite;
Sprite* newSprite;

void changeSprite(Sprite* extSprite){
	newSprite = extSprite; //НЕ *newSprite = *extSprite!!!
	
	//скрыли curSprite, показали newSprite
	curSprite->alpha = 0;
	newSprite->alpha = 1;
	
	curSprite = newSprite;
}

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

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

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


 


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


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