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

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

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

Регистрация: Aug 2010
Адрес: Russia, Cheboksary
Сообщений: 50
Отправить сообщение для RomECH с помощью ICQ Отправить сообщение для RomECH с помощью Skype™
По умолчанию Передача переменной между уровнями

Объект (мувиклип) должен увеличить некую числовую переменную верхнего уровня. То есть, какой код писать в главном и дочернем объекте?
AS3

Старый 27.01.2011, 11:41
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 2  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Код AS3:
package {
  import flash.display.Sprite;
  import flash.display.MovieClip;
 
  public class Test extends Sprite {
    private var _counter : int;
    private var _child   : Child;
    public function Test() {
      _child = new Child();
     addChild(_child); // факультативно
     _child.addEventListener(CounterEvent.INC_COUNTER, incCounterHandler);
    }
 
    private function incCounterHandler(event : CounterEvent):void{
      _counter++;
      trace("counter = " + _counter);
    }
  }
}
 
import flash.utils.setInterval;
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
 
internal class Child extends MovieClip{
  public static const CHILD_DEF_WIDTH : int = 100;
  public static const CHILD_DEF_HEIGTH : int = 100;
  private var _intervalIdx : int;
  public function Child(){
    _intervalIdx = setInterval(dispatch, 1000);
    initGraphic();
  }
 
  private function initGraphic():void{
    graphics.beginFill(0x0, 0.5);
    graphics.drawRect(0, 0, CHILD_DEF_WIDTH, CHILD_DEF_HEIGTH);
    addEventListener(MouseEvent.CLICK, clickHandler);
  }
 
  private function clickHandler(event : MouseEvent):void{
    dispatch();
  }
 
  private function dispatch():void{
    dispatchEvent(new CounterEvent(CounterEvent.INC_COUNTER));
  }
}
 
internal class CounterEvent extends Event{
  public static const INC_COUNTER : String = "increment_counter";
  public function CounterEvent(type : String, bubbles : Boolean = false, cancelable : Boolean = false){
   super(type, bubbles, cancelable);
  }
}
setInterval для того, чтобы обозначить, что в общем-то все равно, мувиклип ли дочерний объект или нет


или так, что уже не очень хорошо, так как потомок вовсе не обязан знать о родителе:

Код AS3:
package {
  import flash.display.Sprite;
  import flash.display.MovieClip;
 
  public class Parent extends Sprite {
    private var _counter : int;
    private var _child   : Child;
    public function Parent() {
      _child = new Child();
      addChild(_child); // факультативно
    }
 
    public function incCounter():void{
      _counter++;
      trace("counter = " + _counter);
    }
  }
}
 
import flash.utils.setInterval;
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
 
internal class Child extends MovieClip{
  public static const CHILD_DEF_WIDTH : int = 100;
  public static const CHILD_DEF_HEIGTH : int = 100;
  private var _intervalIdx : int;
  public function Child(){
    _intervalIdx = setInterval(incParentCounter, 1000);
    initGraphic();
  }
 
  private function initGraphic():void{
    graphics.beginFill(0x0, 0.5);
    graphics.drawRect(0, 0, CHILD_DEF_WIDTH, CHILD_DEF_HEIGTH);
    addEventListener(MouseEvent.CLICK, clickHandler);
  }
 
  private function clickHandler(event : MouseEvent):void{
    incParentCounter();
  }	
 
  private function incParentCounter():void{
    var currParent : Parent = parent as Parent;
    if(currParent){
      currParent.incCounter();
    }
  }
}
или вот так, что тоже не очень хорошо по той же причине, но подойдет не только для дисплейобжектов


Код AS3:
package {
  import flash.display.Sprite;
  import flash.display.MovieClip;
 
  public class Parent extends Sprite {
    private var _counter : int;
    private var _child   : Child;
    public function Parent() {
      _child = new Child(this);
      addChild(_child); // факультативно
    }
 
    public function incCounter():void{
      _counter++;
      trace("counter = " + _counter);
    }
  }
}
 
import flash.utils.setInterval;
import flash.events.Event;
import flash.display.MovieClip;
import flash.events.MouseEvent;
 
internal class Child extends MovieClip{
  public static const CHILD_DEF_WIDTH : int = 100;
  public static const CHILD_DEF_HEIGTH : int = 100;
  private var _intervalIdx : int;
  private var _parent : Parent;
  public function Child(parent : Parent){
    _intervalIdx = setInterval(incParentCounter, 1000);
    initGraphic();
    _parent = parent;
  }
 
  private function initGraphic():void{
    graphics.beginFill(0x0, 0.5);
    graphics.drawRect(0, 0, CHILD_DEF_WIDTH, CHILD_DEF_HEIGTH);
    addEventListener(MouseEvent.CLICK, clickHandler);
  } 
 
  private function clickHandler(event : MouseEvent):void{
    incParentCounter();
  }	
 
  private function incParentCounter():void{
    if(_parent){
      _parent.incCounter();
    }
  }
}


Последний раз редактировалось ChuwY; 27.01.2011 в 12:01.
Старый 27.01.2011, 16:41
tsarapkabel вне форума Посмотреть профиль Отправить личное сообщение для tsarapkabel Найти все сообщения от tsarapkabel
  № 3  
Ответить с цитированием
tsarapkabel
 
Аватар для tsarapkabel

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
Сейчас тупость спрошу, но зачем дитя расширяет MovieClip? Чем Sprite не угодил?

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

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
От нечего делать Вроде как, разница минимальна по занимаемой памяти со спрайтом, а тут еще и условие такое
Цитата:
Объект (мувиклип) должен увеличить некую числовую переменную верхнего уровня.

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

Регистрация: Nov 2009
Адрес: в златоглавой
Сообщений: 745
А, да, не обратил внимание на мувиклип в условии.

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

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

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


 


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


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