![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 60
|
Привет! Проблема в удалении объекта класса из самого класса функция 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;
}
}
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Господи, кто вас научил называть переменные транслитом? Гурский?
А имя класса «S_C» хоть что-нибудь говорит кому-нибудь, кроме создателя? Удалить экземпляр класса внутри класса нельзя — только удаление через delete извне. В твоем случае delete s1; и уменьшение параметра «chislo» на след. строке. |
|
|||||
|
Регистрация: Jun 2006
Сообщений: 60
|
Спасибо Денис, я не с такими классами работаю, просто наученный горьким опытом переписываю их в англоязычной форме, они у меня все по русски называются, класс с большой буквы, обьекты с маленькой, это во всех книгах рекомендуют.
|
|
|||||
|
Регистрация: 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); Идея простая - нам надо направить вызов delete на сам объект. А насчет русских буков.. ЕЙ-богу, лучше транслитом.. Последний раз редактировалось Kikasso; 16.12.2006 в 20:26. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
таймлайн можно получить изнутри класса:
вызов: Вот тут без eval() не обойтись. Последний раз редактировалось Kikasso; 16.12.2006 в 20:33. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Kikasso, что такое _target?
|
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
код в первом кадре: таймлайн, в котором сработал код. То есть то самое место, где мы сказали Последний раз редактировалось Kikasso; 17.12.2006 в 07:59. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ясно. Только неясно, почему это у тебя работает — свойство _target есть только у мувиклипов, кнопок и текстовых полей.
Впрочем, адресация слешами была ещё в 4-ой версии, можно забыть. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
Все классы AS2 глобальны, и _target изнутри класса ссылается на "/", где бы мы экземпляр класса не создавали. Ну чтож, передадим вручную. Зато объект можно создавать где угодно, в другом объекте например. Смотрите аттач. Засейвил под 7-ку.Надо только помнить, что сам объект не убьется, пока не придет сборщик мусора и не увидит, что ссылок на объект больше нет. PS:: В слове _target есть некий смысл. В ответ приходит строка, и ее можно использовать как идентификатор. Например, для ручного depth контроля. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Смысл, который есть в _target можно узнать в хелпе. Из-за организации, все классы лежат внутри мувиков, поэтому там есть _target. Хотя по факту, свойство не должно быть определено в не-мувиклипах. Лучше не вспоминать методы четверки и пользовать обычный delete. Объект из памяти удалить так просто нельзя. Да и какой смысл вообще в методе del()? Я могу его вызвать в совершенно ином месте для удаления ссылки на объект в том месте, где он был создан. А там, где я вызвал этот метод останется ссылка на него. Не заморачивайся
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|