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

Reply via email to