Hello, I have a probably very stupid problem:
I'm trying to create a custom v2 component representing a playing card (full source code at the bottom). It works mostly ok, but when I try to get _parent's _width and _height in its onPress handler in order to restrict dragging: private function onPress():Void { setDepthTo(DepthManager.kTop); startDrag(this); // startDrag(this, false, // 0, 0, _parent._width - _width, _parent._height - _height); dispatchEvent(clicked_obj); } I surprisingly get same values as for the _width and _height of the component itself. And for _root too: CLICKED CARD: [EMAIL PROTECTED],127.5 rot: 0 PARENT1: _level0 159.75x244.85 ROOT: _level0 159.75x244.85 PARENT2: 183.5x265.65 Why does it happen? Thank you Alex PS: Here is the full code (it is actually short except the CARDS[] array): import mx.managers.DepthManager; import mx.events.EventDispatcher; import mx.core.UIComponent; [Event('clicked')] [Event('released')] class Card extends UIComponent { static var symbolName:String = 'Card'; static var symbolOwner:Object = Card; var className:String = 'Card'; static var WIDTH:Number = 160; static var HEIGHT:Number = 245; static var YOU:Number = 0; static var LEFT:Number = 1; static var RIGHT:Number = 2; static var NOTRUMP:Number = 0; static var SPADES:Number = 1; static var CLUBS:Number = 2; static var DIAMONDS:Number = 3; static var HEARTS:Number = 4; static var UNKNOWN:Number = 0; static var SEVEN:Number = 1; static var EIGHT:Number = 2; static var NINE:Number = 3; static var TEN:Number = 4; static var JACK:Number = 5; static var QUEEN:Number = 6; static var KING:Number = 7; static var ACE:Number = 8; static var CARDS:Array = [ { index: 0, str: '00;', label: '1 card', ruslabel: '1 карта', rank: UNKNOWN, suit: NOTRUMP }, { index: 1, str: '01;', label: '7 spades', ruslabel: '7 пик', rank: SEVEN, suit: SPADES }, { index: 2, str: '02;', label: '7 clubs', ruslabel: '7 треф', rank: SEVEN, suit: CLUBS }, { index: 3, str: '03;', label: '7 diamonds', ruslabel: '7 бубен', rank: SEVEN, suit: DIAMONDS }, { index: 4, str: '04;', label: '7 hearts', ruslabel: '7 червей', rank: SEVEN, suit: HEARTS }, { index: 5, str: '05;', label: '8 spades', ruslabel: '8 пик', rank: EIGHT, suit: SPADES }, { index: 6, str: '06;', label: '8 clubs', ruslabel: '8 треф', rank: EIGHT, suit: CLUBS }, { index: 7, str: '07;', label: '8 diamonds', ruslabel: '8 бубен', rank: EIGHT, suit: DIAMONDS }, { index: 8, str: '08;', label: '8 hearts', ruslabel: '8 червей', rank: EIGHT, suit: HEARTS }, { index: 9, str: '09;', label: '9 spades', ruslabel: '9 пик', rank: NINE, suit: SPADES }, { index: 10, str: '10;', label: '9 clubs', ruslabel: '9 треф', rank: NINE, suit: CLUBS }, { index: 11, str: '11;', label: '9 diamonds', ruslabel: '9 бубен', rank: NINE, suit: DIAMONDS }, { index: 12, str: '12;', label: '9 hearts', ruslabel: '9 червей', rank: NINE, suit: HEARTS }, { index: 13, str: '13;', label: '10 spades', ruslabel: '10 пик', rank: TEN, suit: SPADES }, { index: 14, str: '14;', label: '10 clubs', ruslabel: '10 треф', rank: TEN, suit: CLUBS }, { index: 15, str: '15;', label: '10 diamonds', ruslabel: '10 бубен', rank: TEN, suit: DIAMONDS }, { index: 16, str: '16;', label: '10 hearts', ruslabel: '10 червей', rank: TEN, suit: HEARTS }, { index: 17, str: '17;', label: 'J spades', ruslabel: 'В пик', rank: JACK, suit: SPADES }, { index: 18, str: '18;', label: 'J clubs', ruslabel: 'В треф', rank: JACK, suit: CLUBS }, { index: 19, str: '19;', label: 'J diamonds', ruslabel: 'В бубен', rank: JACK, suit: DIAMONDS }, { index: 20, str: '20;', label: 'J hearts', ruslabel: 'В червей', rank: JACK, suit: HEARTS }, { index: 21, str: '21;', label: 'Q spades', ruslabel: 'Д пик', rank: QUEEN, suit: SPADES }, { index: 22, str: '22;', label: 'Q clubs', ruslabel: 'Д треф', rank: QUEEN, suit: CLUBS }, { index: 23, str: '23;', label: 'Q diamonds', ruslabel: 'Д бубен', rank: QUEEN, suit: DIAMONDS }, { index: 24, str: '24;', label: 'Q hearts', ruslabel: 'Д червей', rank: QUEEN, suit: HEARTS }, { index: 25, str: '25;', label: 'K spades', ruslabel: 'К пик', rank: KING, suit: SPADES }, { index: 26, str: '26;', label: 'K clubs', ruslabel: 'К треф', rank: KING, suit: CLUBS }, { index: 27, str: '27;', label: 'K diamonds', ruslabel: 'К бубен', rank: KING, suit: DIAMONDS }, { index: 28, str: '28;', label: 'K hearts', ruslabel: 'К червей', rank: KING, suit: HEARTS }, { index: 29, str: '29;', label: 'A spades', ruslabel: 'Т пик', rank: ACE, suit: SPADES }, { index: 30, str: '30;', label: 'A clubs', ruslabel: 'Т треф', rank: ACE, suit: CLUBS }, { index: 31, str: '31;', label: 'A diamonds', ruslabel: 'Т бубен', rank: ACE, suit: DIAMONDS }, { index: 32, str: '32;', label: 'A hearts', ruslabel: 'Т червей', rank: ACE, suit: HEARTS } ]; // the card value, index in the CARDS[] array private var __index:Number; // whom does these card belong to: YOU, LEFT or RIGHT private var __loc:Number; // 2 event objects private var clicked_obj:Object; private var released_obj:Object; private var bb_mc:MovieClip; private var card_mc:MovieClip; private var setDepthTo:Function; private static var dispatcherInit = EventDispatcher.initialize(Card.prototype); function Card() { } private function init():Void { super.init(); bb_mc.unloadMovie(); clicked_obj = {target: this, type: 'clicked'}; released_obj = {target: this, type: 'released'}; } private function createChildren():Void { size(); } private function onPress():Void { trace('CLICKED CARD: ' + _width + 'x' + _height + '@' + _x + ',' + _y + ' rot: ' + _rotation); trace('PARENT1: ' + _parent + ' ' + _parent._width + 'x' + _parent._height); trace('ROOT: ' + _root + ' ' + _root._width + 'x' + _root._height); setDepthTo(DepthManager.kTop); _rotation = Math.floor(Math.random() * 9 - 4); _x -= 1; _y -= 2; _xscale += 4; _yscale += 4; trace('PARENT2: ' + _parent._width + 'x' + _parent._height); startDrag(this); // startDrag(this, false, // 0, 0, _parent._width - _width, _parent._height - _height); dispatchEvent(clicked_obj); } private function onRelease():Void { trace('RELEASED CARD: ' + _width + 'x' + _height + '@' + _x + ',' + _y + ' rot: ' + _rotation); _x += 1; _y += 2; _xscale -= 4; _yscale -= 4; // remove any shadow or glow filters = []; stopDrag(); dispatchEvent(released_obj); } private function onReleaseOutside():Void { onRelease(); } // invoked when component is resized private function size():Void { super.size(); //if (! (this.__width > 0 && this.__height > 0) //return; invalidate(); } // called after invalidate() private function draw():Void { super.draw(); } [Inspectable(defaultValue=0, type='Number')] public function get index():Number { return __index; } public function set index(n:Number):Void { // invalid index if (isNaN(n) || n < 0 || n >= CARDS.length) return; // index hasn't changed if (__index == n) return; __index = n; this.attachMovie(CARDS[n].label, 'card_mc', 10); invalidate(); } }
_______________________________________________ Flashcoders@chattyfig.figleaf.com To change your subscription options or search the archive: http://chattyfig.figleaf.com/mailman/listinfo/flashcoders Brought to you by Fig Leaf Software Premier Authorized Adobe Consulting and Training http://www.figleaf.com http://training.figleaf.com