![]() |
|
||||||||||
|
|
|
|||||
|
Здраствуйте. Объясните мне пожалуйста, зачем нужен кастинг ? Да да, именно зачем, а не что это такое. Проблемы как таковой нет, но есть здоровый интерес. Вот к примеру написал:
package { import flash.display.Sprite; import flash.text.TextField; import flash.events.Event; import flash.events.MouseEvent; public class RootClass extends Sprite { private var txt:TextField; public function RootClass() { stage.addEventListener("click", onStageClick); } public function onStageClick(event:MouseEvent) { txt = new TextField(); txt.type = "input"; txt.x = event.stageX; txt.y = event.stageY; txt.addEventListener("added", onTxtAdded); addChild(txt); } public function onTxtAdded(event:Event) { trace(event.target); stage.focus = event.target as TextField; } } } |
|
|||||
|
стервочка (я мужик)
|
трэйс выдаёт то, что выдаёт метод toString()
|
|
|||||
|
Цитата:
|
|
|||||
|
стервочка (я мужик)
|
ну если это понятно, тогда зачем так яро обращено внимание в вопросе на этот факт?
кастинг нужен для того, что бы виртуальная машина не обращалась к объекту за списком классов и не искала в нём нужный класс. в случаи с методами/свойствами идёт ещё обращение к таблице методов всех классов, и поиск в ней нужного метода, потом попытка найти в динамических свойствах и т.д. короче, Вы делает работу за ВМ, тем самым упрощая ей жизнь. |
|
|||||
|
Вот теперь понятно, большое спасибо BlooDHounD, а то меня начинал напрягать этот вопрос.
|
|
|||||
|
Прикольно, а я думал, что даункасты не нужны. Т.е. использование собственно типа как id типа это всегда фейл.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Не каждый Object есть TextField.
|
|
|||||
|
Это понятно.
Я вот просто тут сижу и медитирую на вот такой вот код: for ( j = 0; j < BUILDINGS_OBJECTS.numChildren; j++ ) { if ( BUILDINGS_OBJECTS.getChildAt( j ) is house1 && ALLAY_WEAPONS_OBJECTS.getChildAt( i ).hitTestObject( BUILDINGS_OBJECTS.getChildAt( j ) ) ) { _rocket = ALLAY_WEAPONS_OBJECTS.getChildAt( i ) as rocket; if ( !_rocket.explosion ) { _rocket.explosion = ConstAttributes.FRAME_GROUND_BLAST; _house1 = BUILDINGS_OBJECTS.getChildAt( j ) as house1; _house1.destruction = ConstAttributes.WEAPONS_BOMB_DAMAGE; } }else if ( BUILDINGS_OBJECTS.getChildAt( j ) is house2 && ALLAY_WEAPONS_OBJECTS.getChildAt( i ).hitTestObject( BUILDINGS_OBJECTS.getChildAt( j ) ) ) { _rocket = ALLAY_WEAPONS_OBJECTS.getChildAt( i ) as rocket; if ( !_rocket.explosion ) { _rocket.explosion = ConstAttributes.FRAME_GROUND_BLAST; _house2 = BUILDINGS_OBJECTS.getChildAt( j ) as house2; _house2.destruction = ConstAttributes.WEAPONS_BOMB_DAMAGE; } }else if ( BUILDINGS_OBJECTS.getChildAt( j ) is house3 && ALLAY_WEAPONS_OBJECTS.getChildAt( i ).hitTestObject( BUILDINGS_OBJECTS.getChildAt( j ) ) ) { _rocket = ALLAY_WEAPONS_OBJECTS.getChildAt( i ) as rocket; if ( !_rocket.explosion ) { _rocket.explosion = ConstAttributes.FRAME_GROUND_BLAST; _house3 = BUILDINGS_OBJECTS.getChildAt( j ) as house3; _house3.destruction = ConstAttributes.WEAPONS_BOMB_DAMAGE; } }else if ( BUILDINGS_OBJECTS.getChildAt( j ) is runway ) { old_point = new Point( ALLAY_WEAPONS_OBJECTS.getChildAt(i).x, ALLAY_WEAPONS_OBJECTS.getChildAt(i).y ); new_point = BUILDINGS_OBJECTS.localToGlobal( old_point ); if ( runway( BUILDINGS_OBJECTS.getChildAt(j) ).getTestClip().hitTestPoint( new_point.x, new_point.y, true ) ) { _rocket = ALLAY_WEAPONS_OBJECTS.getChildAt( i ) as rocket; if ( !_rocket.explosion ) { _rocket.explosion = ConstAttributes.FRAME_GROUND_BLAST; _runway = BUILDINGS_OBJECTS.getChildAt( j ) as runway; _runway.destruction = ConstAttributes.WEAPONS_BOMB_DAMAGE; } } } } Моя бы воля, as и особенно is из языка выкинул бы. Последний раз редактировалось iNils; 14.04.2009 в 15:16. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|