![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Доброго времени суток. Возникла проблема с пониманием работы оператора as. Читал help и Мука и данный faq, но честно говоря, не понял.
На примере данного кода: Почему же вызывается метод destroy класса MapObject? Ведь разные типы имеют переменная _layerMain и класс MapObject. package { public class GameMap extends Sprite { private var _layerMain:Sprite; public function GameMap() { _layerMain = new Sprite(); addChild(_layerMain); } public function clear():void { if (_layerMain.getChildAt(0) is MapObject) { /* destroy - это пользовательский метод класса MapObject class MapObject extends Sprite */ (_layerMain.getChildAt(0) as MapObject).destroy(); } } } } Последний раз редактировалось goldlider; 13.11.2011 в 23:43. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
_layerMain - имеет один тип, а _layerMain.getChildAt(0) - это совершенно другой обьект, который может иметь (и, в вашем случае, имеет) другой тип.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Цитата:
Почему же тип переменной _cells переводится в тип MapObject. |
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
что у Вас находится по адресу: _cells[brush.tileY][brush.tileX] и будет восприниматься как MapObject
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Тип переменной _cells не переводится в этом коде в MapObject. Чтобы таки попробовать перевести и убедиться, что Array не переводится в MapObject, надо писать
В предыдущем примере это будет Вы не видите отличия между _cells и _cells[brush.tileY][brush.tileX]?
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
приведите пример я че то не догоняю.
Последний раз редактировалось goldlider; 14.11.2011 в 00:46. |
|
|||||
|
у вас на спрайте _layerMain лежит объект MapObject (от DisplayObject).
у вас в массиве _cells "лежит по адресу" [brush.tileY][brush.tileX] объект MapObject (от DisplayObject).
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Цитата:
Аналогичный пример: package { import flash.display.Sprite; public class A extends Sprite // Основной класс приложения { public function A() { var msg:B = new B(); (msg as C).helloBoys; } } } package { public class B { public function B() { } function helloGirls():void { trace("Come on babes"); } } } Последний раз редактировалось goldlider; 14.11.2011 в 12:44. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|