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

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

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

Регистрация: Jun 2006
Сообщений: 60
Cool Удаление объекта класса в методе класса

Привет! Проблема в удалении объекта класса из самого класса функция del(), что неправильно? а как надо? в помоще ничего не нашел.
Очень надо и не огорчите что так никак нельзя

Код:
//S_C.as
class S_C{
	static var chislo:Number=0;
	static function kolichestvo():Number{
		return chislo
	}
	public function S_C(){
		chislo++;
	}
	public function _del(){
		trace("del")
		chislo--;
		//????????????????????????????
		//delete S_C;
	}
}
Код:
// 1.fla
var s1:S_C=new S_C();
var s2:S_C=new S_C();
trace(S_C.kolichestvo())		//выводит 2- правильно
s1._del();				//уменьшает количество
trace(S_C.kolichestvo())		//выводит "del" ; 1 - правильно

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

Регистрация: Sep 2002
Сообщений: 30,787
Господи, кто вас научил называть переменные транслитом? Гурский?
А имя класса «S_C» хоть что-нибудь говорит кому-нибудь, кроме создателя?

Удалить экземпляр класса внутри класса нельзя — только удаление через delete извне. В твоем случае delete s1; и уменьшение параметра «chislo» на след. строке.

Старый 16.12.2006, 10:16
ktotam вне форума Посмотреть профиль Отправить личное сообщение для ktotam Найти все сообщения от ktotam
  № 3  
Ответить с цитированием
ktotam
 
Аватар для ktotam

Регистрация: Jun 2006
Сообщений: 60
Спасибо Денис, я не с такими классами работаю, просто наученный горьким опытом переписываю их в англоязычной форме, они у меня все по русски называются, класс с большой буквы, обьекты с маленькой, это во всех книгах рекомендуют.

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
класс:
Код:
class Test{

public static var _total_:Number = 0;
private var id:String;
private var timeline:MovieClip;

public static function get total():Number{
			return _total_;
}
public static function set total( total:Number ):Void{
		  _total_ = total;
}

 public function Test ( timeline:MovieClip, id:String) {
	this.timeline = timeline;
	this.id = id;
	total ++;
  }
 public function del():Void {
	total --;
    delete timeline[ id ];
}

}
таймлайн:
Код:
import Test;
var t1:Test = new Test(this, "t1");
var t2:Test = new Test(_root, "t2");
trace( t1 + "  "+ t2);
t1.del();
trace( t1 + "  "+ t2);
debug -> list variables: объект удален.
Идея простая - нам надо направить вызов delete на сам объект.

А насчет русских буков.. ЕЙ-богу, лучше транслитом..


Последний раз редактировалось Kikasso; 16.12.2006 в 20:26.
Старый 16.12.2006, 20:31
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 5  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
таймлайн можно получить изнутри класса:
Код:
public function Test ( id:String) {
timeline = eval(_target);
this.id = id;
}
вызов:
Код:
var t1:Test = new Test( "t1");
Вот тут без eval() не обойтись.


Последний раз редактировалось Kikasso; 16.12.2006 в 20:33.
Старый 17.12.2006, 02:43
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Kikasso, что такое _target?

Старый 17.12.2006, 07:50
Kikasso вне форума Посмотреть профиль Отправить личное сообщение для Kikasso Найти все сообщения от Kikasso
  № 7  
Ответить с цитированием
Kikasso
 
Аватар для Kikasso

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от __etc
Kikasso, что такое _target?
Это какое-то мистическое слово.
код в первом кадре:
Код:
trace(_target); // выводит "/" 
trace(eval(_target)); // выводит "_level0"
таймлайн, в котором сработал код.

То есть то самое место, где мы сказали
Код:
var t1:Test = new Test("t1");


Последний раз редактировалось Kikasso; 17.12.2006 в 07:59.
Старый 17.12.2006, 12:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ясно. Только неясно, почему это у тебя работает — свойство _target есть только у мувиклипов, кнопок и текстовых полей.

Впрочем, адресация слешами была ещё в 4-ой версии, можно забыть.

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

Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
Цитата:
Сообщение от __etc
Ясно. Только неясно, почему это у тебя работает — свойство _target есть только у мувиклипов, кнопок и текстовых полей.
Впрочем, адресация слешами была ещё в 4-ой версии, можно забыть.
Правда ваша, уважаемый! Все классы AS2 глобальны, и _target изнутри класса ссылается на "/", где бы мы экземпляр класса не создавали. Ну чтож, передадим вручную. Зато объект можно создавать где угодно, в другом объекте например. Смотрите аттач. Засейвил под 7-ку.
Надо только помнить, что сам объект не убьется, пока не придет сборщик мусора и не увидит, что ссылок на объект больше нет.
Код:
var t4 = t3;
t3.del(); // объект остался под именем t4
PS:: В слове _target есть некий смысл. В ответ приходит строка, и ее можно использовать как идентификатор. Например, для ручного depth контроля.
Вложения
Тип файла: rar unset.rar (6.5 Кб, 57 просмотров)

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

Регистрация: Sep 2002
Сообщений: 30,787
Смысл, который есть в _target можно узнать в хелпе. Из-за организации, все классы лежат внутри мувиков, поэтому там есть _target. Хотя по факту, свойство не должно быть определено в не-мувиклипах. Лучше не вспоминать методы четверки и пользовать обычный delete. Объект из памяти удалить так просто нельзя. Да и какой смысл вообще в методе del()? Я могу его вызвать в совершенно ином месте для удаления ссылки на объект в том месте, где он был создан. А там, где я вызвал этот метод останется ссылка на него. Не заморачивайся

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

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

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


 


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


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