Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как помимо интерфейса потребовать расширения опред. класса? (http://www.flasher.ru/forum/showthread.php?t=143863)

orcpochta 27.08.2010 17:36

Как помимо интерфейса потребовать расширения опред. класса?
 
Т.е. есть интерфейс IMyInterface, как мне потребовать, чтобы класс, его реализующий, обязательно расширял бы при этом Sprite или являлся DisplayObject-ом?

gloomyBrain 27.08.2010 17:49

Попробуйте через наследование интерфейса:
Код AS3:

public interface IMyInterface extends IBitmapDrawable {
 
//...
 
}


orcpochta 27.08.2010 17:55

Ага, спасибо! Я тупой - специально же лазил смотреть, что они реализуют, но глаза разуть забыл))) Спасибо!))

Котяра 27.08.2010 17:59

IBitmapDrawable ? а какие у него методы?
нет никаких - просто сигнальный интерфейс.
Хотелось бы иметь IDisplayObjectContainer с addChild итп..
или IDisplayObject с x,y,width.
Пока выход кастовать всегда к этим классам если нужно достучаться до этих свойств а не к общим интерфейсам - недоработка однако.

gloomyBrain 27.08.2010 17:59

Ну, тут есть один косяк - ваш объект запросто сможет быть BitmapData. Так что не идеальное решение, но проще вряд ли получится

ЗЫ
@Котяра
все необходимые методы можно указать в IMyInterface

Котяра 27.08.2010 18:05

Цитата:

Сообщение от gloomyBrain (Сообщение 931818)
все необходимые методы можно указать в IMyInterface

Это не выход, а если мне нужен будет либо спрайт, либо мой объект с addChild?
спрайт не реализует IMyInterface

gloomyBrain 27.08.2010 18:19

Цитата:

спрайт не реализует IMyInterface
Согласен, тогда лучше кастовать в более широкий тип

Котяра 27.08.2010 18:46

Это опять же не выход..
возьмём реальный пример.
реализую систему событий со всплытиями.
хранителями могут быть как спрайты так и объекты типа DataHolder.
и у того и у того должен быть геттер parent и события addChild.
сейчас это реализовать никак нельзя только через
Код AS3:

if (obj is Sprite)
(obj as Sprite).addChild(child as DisplayObject);
 
if (obj is DataHolder)
(obj as DataHolder).addChild(child as DataHolder);
 
//вместо
(obj as IDiplayObjectContainer).addChild(child  as IDiplayObjectContainer)


orcpochta 02.09.2010 15:07

У меня сейчас случился разрыв шаблона. Я нечаянно узнал, что можно сделать так:

Код AS3:

package  
{
 
        import flash.display.Sprite;
 
        public interface INewInterface extends Sprite
        {
                function hello ( ):void;
        }
 
}

В Муке такого не было, что интерфейс может являться расширением не интерфейса, а конкретного класса.

В общем, если после этого в FD создать класс, назначить его расширением, например, Shape-а, потребовать реализовать INewInterface и поставить галку генерирования методов интерфейсной реализации, то он выдаст вот такую хрень - в общем я в легком шоке и пытаюсь осмыслить, что происходит)))

Код AS3:

package  
{
        import flash.events.Event;
        import flash.display.Stage;
        import flash.display.LoaderInfo;
        import flash.geom.Transform;
        import flash.geom.Vector3D;
        import flash.display.DisplayObjectContainer;
        import flash.display.Shader;
        import flash.accessibility.AccessibilityProperties;
        import flash.ui.ContextMenu;
        import flash.accessibility.AccessibilityImplementation;
        import flash.geom.Point;
        import flash.text.TextSnapshot;
        import flash.geom.Rectangle;
        import flash.display.Graphics;
        import flash.display.Sprite;
        import flash.media.SoundTransform;
        import flash.display.DisplayObject;
        import flash.display.Shape;
 
        public class InterfaceTest extends Shape implements NewInterface
        {
 
                public function InterfaceTest()
                {
                        super();
 
                }
 
                /* INTERFACE NewInterface */
 
                public function hello():void
                {
 
                }
 
                public function get dropTarget():DisplayObject
                {
 
                }
 
                public function get soundTransform():SoundTransform
                {
 
                }
 
                public function get hitArea():Sprite
                {
 
                }
 
                public function set buttonMode(value:Boolean):void
                {
 
                }
 
                public function get graphics():Graphics
                {
 
                }
 
                public function get useHandCursor():Boolean
                {
 
                }
 
                public function set hitArea(value:Sprite):void
                {
 
                }
 
                public function get buttonMode():Boolean
                {
 
                }
 
                public function stopDrag():void
                {
 
                }
 
                public function set useHandCursor(value:Boolean):void
                {
 
                }
 
                public function set soundTransform(sndTransform:SoundTransform):void
                {
 
                }
 
                public function startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void
                {
 
                }
 
                public function get mouseChildren():Boolean
                {
 
                }
 
                public function get numChildren():int
                {
 
                }
 
                public function contains(child:DisplayObject):Boolean
                {
 
                }
 
                public function swapChildrenAt(index1:int, index2:int):void
                {
 
                }
 
                public function getChildByName(name:String):DisplayObject
                {
 
                }
 
                public function removeChildAt(index:int):DisplayObject
                {
 
                }
 
                public function getChildIndex(child:DisplayObject):int
                {
 
                }
 
                public function addChildAt(child:DisplayObject, index:int):DisplayObject
                {
 
                }
 
                public function set tabChildren(enable:Boolean):void
                {
 
                }
 
                public function get textSnapshot():TextSnapshot
                {
 
                }
 
                public function swapChildren(child1:DisplayObject, child2:DisplayObject):void
                {
 
                }
 
                public function get tabChildren():Boolean
                {
 
                }
 
                public function getObjectsUnderPoint(point:Point):Array
                {
 
                }
 
                public function set mouseChildren(enable:Boolean):void
                {
 
                }
 
                public function removeChild(child:DisplayObject):DisplayObject
                {
 
                }
 
                public function getChildAt(index:int):DisplayObject
                {
 
                }
 
                public function addChild(child:DisplayObject):DisplayObject
                {
 
                }
 
                public function areInaccessibleObjectsUnderPoint(point:Point):Boolean
                {
 
                }
 
                public function setChildIndex(child:DisplayObject, index:int):void
                {
 
                }
 
                public function get accessibilityImplementation():AccessibilityImplementation
                {
 
                }
 
                public function get focusRect():Object
                {
 
                }
 
                public function set focusRect(focusRect:Object):void
                {
 
                }
 
                public function get doubleClickEnabled():Boolean
                {
 
                }
 
                public function set contextMenu(cm:ContextMenu):void
                {
 
                }
 
                public function get tabEnabled():Boolean
                {
 
                }
 
                public function get contextMenu():ContextMenu
                {
 
                }
 
                public function set accessibilityImplementation(value:AccessibilityImplementation):void
                {
 
                }
 
                public function set doubleClickEnabled(enabled:Boolean):void
                {
 
                }
 
                public function set mouseEnabled(enabled:Boolean):void
                {
 
                }
 
                public function set tabIndex(index:int):void
                {
 
                }
 
                public function get mouseEnabled():Boolean
                {
 
                }
 
                public function get tabIndex():int
                {
 
                }
 
                public function set tabEnabled(enabled:Boolean):void
                {
 
                }
 
                public function get visible():Boolean
                {
 
                }
 
                public function get rotation():Number
                {
 
                }
 
                public function localToGlobal(point:Point):Point
                {
 
                }
 
                public function get name():String
                {
 
                }
 
                public function set width(value:Number):void
                {
 
                }
 
                public function globalToLocal(point:Point):Point
                {
 
                }
 
                public function get blendMode():String
                {
 
                }
 
                public function get scale9Grid():Rectangle
                {
 
                }
 
                public function set name(value:String):void
                {
 
                }
 
                public function get rotationX():Number
                {
 
                }
 
                public function get rotationY():Number
                {
 
                }
 
                public function set scaleX(value:Number):void
                {
 
                }
 
                public function set scaleY(value:Number):void
                {
 
                }
 
                public function set scaleZ(value:Number):void
                {
 
                }
 
                public function get accessibilityProperties():AccessibilityProperties
                {
 
                }
 
                public function set scrollRect(value:Rectangle):void
                {
 
                }
 
                public function get rotationZ():Number
                {
 
                }
 
                public function get height():Number
                {
 
                }
 
                public function set blendMode(value:String):void
                {
 
                }
 
                public function set scale9Grid(innerRectangle:Rectangle):void
                {
 
                }
 
                public function getBounds(targetCoordinateSpace:DisplayObject):Rectangle
                {
 
                }
 
                public function set blendShader(value:Shader):void
                {
 
                }
 
                public function get opaqueBackground():Object
                {
 
                }
 
                public function get parent():DisplayObjectContainer
                {
 
                }
 
                public function get cacheAsBitmap():Boolean
                {
 
                }
 
                public function set rotationX(value:Number):void
                {
 
                }
 
                public function set rotationY(value:Number):void
                {
 
                }
 
                public function set rotationZ(value:Number):void
                {
 
                }
 
                public function local3DToGlobal(point3d:Vector3D):Point
                {
 
                }
 
                public function set alpha(value:Number):void
                {
 
                }
 
                public function globalToLocal3D(point:Point):Vector3D
                {
 
                }
 
                public function set accessibilityProperties(value:AccessibilityProperties):void
                {
 
                }
 
                public function get width():Number
                {
 
                }
 
                public function hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
                {
 
                }
 
                public function set cacheAsBitmap(value:Boolean):void
                {
 
                }
 
                public function get scaleX():Number
                {
 
                }
 
                public function get scaleY():Number
                {
 
                }
 
                public function get scaleZ():Number
                {
 
                }
 
                public function get scrollRect():Rectangle
                {
 
                }
 
                public function get mouseX():Number
                {
 
                }
 
                public function get mouseY():Number
                {
 
                }
 
                public function set height(value:Number):void
                {
 
                }
 
                public function set mask(value:DisplayObject):void
                {
 
                }
 
                public function getRect(targetCoordinateSpace:DisplayObject):Rectangle
                {
 
                }
 
                public function get alpha():Number
                {
 
                }
 
                public function set transform(value:Transform):void
                {
 
                }
 
                public function get loaderInfo():LoaderInfo
                {
 
                }
 
                public function get root():DisplayObject
                {
 
                }
 
                public function set visible(value:Boolean):void
                {
 
                }
 
                public function set opaqueBackground(value:Object):void
                {
 
                }
 
                public function hitTestObject(obj:DisplayObject):Boolean
                {
 
                }
 
                public function get mask():DisplayObject
                {
 
                }
 
                public function set x(value:Number):void
                {
 
                }
 
                public function set y(value:Number):void
                {
 
                }
 
                public function get transform():Transform
                {
 
                }
 
                public function set z(value:Number):void
                {
 
                }
 
                public function set filters(value:Array):void
                {
 
                }
 
                public function get x():Number
                {
 
                }
 
                public function get y():Number
                {
 
                }
 
                public function get z():Number
                {
 
                }
 
                public function get filters():Array
                {
 
                }
 
                public function set rotation(value:Number):void
                {
 
                }
 
                public function get stage():Stage
                {
 
                }
 
                public function dispatchEvent(event:Event):Boolean
                {
 
                }
 
                public function willTrigger(type:String):Boolean
                {
 
                }
 
                public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
                {
 
                }
 
                public function toString():String
                {
 
                }
 
                public function hasEventListener(type:String):Boolean
                {
 
                }
 
                public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
                {
 
                }
 
        }
 
}


Котяра 02.09.2010 15:30

Это интересно, но всё равно ведь Shape не будет расширять IMyInterface..
Или можно будет использовать Shape в качестве общего класса/интерфейса?
Надо будет потестить.


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

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