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

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

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

Регистрация: Feb 2006
Сообщений: 32
По умолчанию Наследование классов... странности

Существуют 3 класса MovieItemVM extends MovieClip, ArhivMovie extends MovieItemVM,
VexMenuMovie extends MovieItemVM

Во всех трех существует функция refreshMovie, так вот вопрос собственно почему такое может быть, что в ArhivMovie эта функция перекрывает функцию в MovieItemVM, а в VexMenuMovie – нет.

Старый 07.12.2006, 14:29
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Покажи классы.

Старый 07.12.2006, 14:41
katyakrog вне форума Посмотреть профиль Отправить личное сообщение для katyakrog Найти все сообщения от katyakrog
  № 3  
Ответить с цитированием
katyakrog

Регистрация: Feb 2006
Сообщений: 32
MovieItemVM.as


Код:
import newsItemTxt;
import mx.utils.Delegate;
import mx.events.EventDispatcher;

class MovieItemVM extends MovieClip {
	var strTitle:String;
	var strAbstract:String;
	var strDesc:String;
	var strImg:String;
	var txtTitle:TextField;
	var containerImg:MovieClip
	var podlozhka:MovieClip;	
	var format1_fmt:TextFormat;
	var isImgLoaded;
	var height_pole:Number;
	var width_pole:Number;
	var WIDTHMOVIE:Number = 600;
		
	
	 // Создаем методы которые нам передаст EventDispatcher 
        private var dispatchEvent:Function; // Данный метод будет вещать события
        public var addEventListener,removeEventListener:Function; // Данные два метода будут подписывать и удалять слушатели
	public var onRefreshMovie:Function; // А это наше будущее событие
	
	/////////////////////////////////////////////////////////////////////
	// Конструктор класса
	/////////////////////////////////////////////////////////////////////
	
	function MovieItemVM() {		
		EventDispatcher.initialize(this);
		this._visible = false;
		isImgLoaded  = 0;	
	}
	
	/////////////////////////////////////////////////////////////////////
	// Методы PUBLIC
	////////////////////////////////////////

	
	
	public  function getHeight() {
		return height_pole;
	}
	
	public  function getwidth() {
		return width_pole;
	}
	
	private function loadImages() {
		if(strImg){
			this.createEmptyMovieClip("containerImg", 3);			
			var image_mcl:MovieClipLoader = new MovieClipLoader();
			image_mcl.addListener(this);			
			image_mcl.loadClip(strImg, containerImg);			
		}	else {
			this.onLoadError();
		}
	}
	
	private function onLoadError(target_mc:MovieClip) {		
		isImgLoaded = -1;
		trace('movieItemVM: onLoadError');
		proba();
		refreshMovie();
	}
	
	private function proba() {	
		trace('movieItemVM: proba');				
	}	 
	
	private function onLoadInit(target_mc:MovieClip) {	
		isImgLoaded = 1;
		trace('movieItemVM: onLoadInit');
		proba();
		refreshMovie();		
	}	 

	public function showMovie(){						
			this._visible = true;			
	}
	
	public function hideMovie(){		
		this._visible = false;
	}	
	
	public function createMovie(){		
	   if( isImgLoaded == 0 ){
			this.loadImages();
	   } else {
		   trace('movieItemVM: createMovie');
		    refreshMovie();	  
	   }	   
	}	
	
	
	public function CreateText(txtTit){
			format1_fmt = new TextFormat();
			format1_fmt.font = "Arial";
			format1_fmt.bold = true;
			format1_fmt.color = 0xFFFFFF;				
			
			
			txtTit.multiline = true;
			txtTit.condenseWhite = true;			
			//txtTit.border = true;
			txtTit.wordWrap = true;
			txtTit.autoSize = true;			
			txtTit.text = strDesc;						
			txtTit._y = 0;
			txtTit.setTextFormat(this.format1_fmt);		
		}	
	
	private function refreshMovie(){	
		trace('movieItemVM: refreshMovie');
			//проверка существования картинки в блоке
			if(containerImg != undefined){				
				this.createTextField("txtTitle", 2, containerImg._width  + 20, 0, WIDTHMOVIE - (containerImg._width + 20), 300);			
				this.CreateText(txtTitle);				
				width_pole = txtTitle._width + containerImg._width + 20;				
				if(txtTitle._height>containerImg._height){
					height_pole = txtTitle._height;
				}	else{
					height_pole = containerImg._height;
				}
				
			}else{				
				this.createTextField("txtTitle", 2, 0, 0, WIDTHMOVIE, 300);
				this.CreateText(txtTitle);				
				width_pole = txtTitle._width;				
				height_pole = txtTitle._height;				
				}			
				
				this.createEmptyMovieClip("podlozhka", 0);							
				podlozhka.beginFill(0xFFFFFF);				
				podlozhka.moveTo(0, 0);
				podlozhka.lineTo(0, 0);
				podlozhka.lineTo(WIDTHMOVIE, 0);
				podlozhka.lineTo(WIDTHMOVIE, height_pole);
				podlozhka.lineTo(0, height_pole);
				podlozhka.endFill();				
				podlozhka._alpha=30;			
		dispatchEvent({type:'onRefreshMovie'});		
	}

	public function fill(list) {
		strTitle = list["title"];
		strAbstract = list["subtitle"];
		strDesc = list["description"];
		strImg = list["img"];		
	}
}


ArhivMovie.as
Код:
import MovieItemVM;
import mx.utils.Delegate;
import mx.events.EventDispatcher;

class ArhivMovie extends MovieItemVM {	
	var txtArhiv:TextField;
	
	// Создаем методы которые нам передаст EventDispatcher, 
        private var dispatchEvent:Function; // Данный метод будет вещать события
        public var addEventListener,removeEventListener:Function; // Данные два метода будут подписывать и удалять слушатели
	public var onParseXml:Function; // А это наше будущее событие	
	
	
	function ArhivMovie() {		
	}
	
	/////////////////////////////////////////////////////////////////////
	// Методы PUBLIC
	/////////////////////////////////////////////////////////////////////
	
	private function onRelease(){		
		var eventObject:Object = {type:'onReleaseNum'};  
			eventObject.Num = this.strTitle;
			dispatchEvent(eventObject);
	}
	
	private function proba() {	
		trace('ArhivMovie: proba');				
	}	
	
	
	private function refreshMovie(){
		trace('ArhivMovie: refreshMovie');
		containerImg.addListener(this);		
		this.txtArhiv = this.createTextField("txtArhiv", this.getNextHighestDepth(), 70, 120, 300, 300);		
		//this.txtArhiv._y = containerImg._height + 10;		
		CreateText(this.txtArhiv);		
		dispatchEvent({type:'onRefreshMovie'});		
	}
}

VexMenuMovie.as
Код:
import MovieItemVM;
import mx.utils.Delegate;
import mx.events.EventDispatcher;

class VexMenuMovie extends MovieItemVM {	
	var txtVex:TextField;
	//var vex:MovieClip;
	
	
	// Создаем методы которые нам передаст EventDispatcher, 
        private var dispatchEvent:Function; // Данный метод будет вещать события
        public var addEventListener,removeEventListener:Function; // Данные два метода будут подписывать и удалять слушатели
	public var onParseXml:Function; // А это наше будущее событие	
	
	
	function VexMenuMovie() {
		trace('VexMenuMovie');
	}
	
	/////////////////////////////////////////////////////////////////////
	// Методы PUBLIC
	/////////////////////////////////////////////////////////////////////
	
	private function onRelease(){		
		var eventObject:Object = {type:'onReleaseNum'};  
			eventObject.Num = this.strTitle;
			dispatchEvent(eventObject);
	}
	
	private function proba() {	
		trace('VexMenuMovie: proba');				
	}	
	
	
	private function refreshMovie(){
		trace('VexMenuMovie: refreshMovie');
		//this.vex = this.createEmptyMovieClip("vex", this.getNextHighestDepth());		
		this.txtVex = this.createTextField("txtVex", this.getNextHighestDepth(), 70, 120, 300, 300);		
		//this.txtArhiv._y = containerImg._height + 10;		
		CreateText(this.txtVex);		
		dispatchEvent({type:'onRefreshMovie'});		
	}
}

Старый 07.12.2006, 14:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
VexMenuMovie расширяет другой класс, который не существует.

Старый 07.12.2006, 14:47
katyakrog вне форума Посмотреть профиль Отправить личное сообщение для katyakrog Найти все сообщения от katyakrog
  № 5  
Ответить с цитированием
katyakrog

Регистрация: Feb 2006
Сообщений: 32
ArhivMovie extends MovieItemVM;
VexMenuMovie extends MovieItemVM

в чем разница я не поняла?

Старый 07.12.2006, 14:51
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Гм, перед этим я видел extends movieItemVM.
Сейчас посмотрю.

Старый 07.12.2006, 14:54
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Можно рабочий пример?

Старый 07.12.2006, 15:26
katyakrog вне форума Посмотреть профиль Отправить личное сообщение для katyakrog Найти все сообщения от katyakrog
  № 8  
Ответить с цитированием
katyakrog

Регистрация: Feb 2006
Сообщений: 32
я в личку отправила ссылку, тк как не влазит по объему

Старый 07.12.2006, 15:59
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Странность оказалась в классе ListMovie:
Код:
if(this.type == 'vex'){
	var a= VexMenuMovie(_root.sod.attachMovie("VexMenuMovie", "clip"+i, i+1, {_x:0, _y:100*(i+1)}));
	listMovies[i] = a;
	trace('onParseXml: vex');
} /// ^^^^ приаттачили мувик, далее новое условие
if(this.type == 'arhiv'){ // если type равен arhiv
	listMovies[i] = _root.sod.attachMovie("ArhivMovie", "clip"+i, i+1, {_x:0, _y:100*(i+1)});
} else{ // если не равен, то…
	listMovies[i] = _root.sod.attachMovie("MovieItemVM", "clip"+i, i+1, {_x:0, _y:100*(i+1)});
}
Второе условие перекрывает первое — type равен vex, соответственно выполняется аттач MovieItemVM и замещение мувика, созданного в первом условии новым MovieItemVM-ом. Проще говоря, пропущен else =)

А вообще, там тихий ужас — я ковырялся целых полчаса, ища ошибку…


Последний раз редактировалось iNils; 07.12.2006 в 23:52.
Старый 07.12.2006, 16:09
katyakrog вне форума Посмотреть профиль Отправить личное сообщение для katyakrog Найти все сообщения от katyakrog
  № 10  
Ответить с цитированием
katyakrog

Регистрация: Feb 2006
Сообщений: 32
ой =)

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

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

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


 


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


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