سؤال

ما هي أفضل طريقة لإنشاء عدة مناطق للتمرير في التصور أكشن 3 الذي يمتد flash.display.Sprite ويستفيد من التسلسل الهرمي للمن DisplayObjects مستوى منخفضا (Sprite'a، الشكل، والحقل النصي)؟

ولقد حاولت استخدام ثلاثة أشياء mx.containers.Canvas أضاف كأبناء العفريت الرئيسي وحاولوا أيضا تحويل العفريت الرئيسي لقماش ولكن أنا غير قادر على الحصول على أي شيء لتظهر باستخدام الأسلوب. لقد حاولت أيضا إضافة DisplayObjects بلدي باستخدام كل Canvas.addChild وCanvas.rawChildren.addChild.

هل من الضروري / ممكن لإعادة كتابة كل شيء لاستخدام MX. * مكونات أم أن هناك خدعة لعرض الأشياء الأكثر بدائية داخل كائن قماش؟

وهنا بعض التعليمات البرمجية للطريقة التي يعمل باستخدام العفاريت. ونود أن جعل _colSprite، _rowSprite و_mapSprite sroll بقضبان التمرير المرتبطة. عندما تحويلها إلى كائنات قماش رمز يخيم صمت قبل أن يتم استخلاص أي أجسام عرض (في خطوط addChild إذا لم تخني).

وفيما يلي مقتطف من التعليمات البرمجية. هذا هو كل شيء من فئة أكشن واحدة تمتد العفريت.

وSeting ثلاثة مناطق وأود أن انتقل:

this._log("Creating Sprites"); 

                this._colSprite = new Sprite();

                this._colSprite.y=0;

                this._colSprite.x=this._rowLabelWidth + this._rowLabelRightPadding + this._horizontalPadding;


this._rowSprite = new Sprite();

                this._rowSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding + this._verticalPadding;

                this._rowSprite.x=this._horizontalPadding;




                this._mapSprite = new Sprite();

                this._mapSprite.y=this._columnLabelHeight+this._columnLabelBottomPadding+ this._verticalPadding;

                this._mapSprite.x=this._rowLabelWidth + this._rowLabelRightPadding+this._horizontalPadding;


                    this._log("adding kids"); 

addChild(this._mapSprite);

addChild(this._rowSprite);

addChild(this._colSprite);

وظيفة عينة رسم:

 private function _drawColumLabels(colStartIndex: int): void {

        for (var col : int = colStartIndex; col < myData.g.length; col++) {

            var colName : String = this.myData.g[col].label;

            var bottomLeftPoint : Object = this._getCellXYTopLeft(0, col);

            bottomLeftPoint.y = this._columnLabelHeight + this._verticalPadding;

            var centerX : int = Math.round(this._cellWidth / 2 + (this._fontHeight / 2) - 1);



            var colLabel : TextField = new TextField();

                colLabel.defaultTextFormat = this._labelTextFormat;

                colLabel.width = this._columnLabelHeight+this._columnLabelBottomPadding;

                colLabel.text = colName;                

                colLabel.embedFonts = true;





                var colSprite : Sprite = new Sprite();

                colSprite.addChild(colLabel);

                colSprite.x = bottomLeftPoint.x;

                colSprite.y = bottomLeftPoint.y;



                colSprite.rotation = -45;



                this._colSprite.addChild(colSprite);



        }

    }
هل كانت مفيدة؟

المحلول

وبعد إضافة الأطفال إلى كل قماش قد تحتاج إلى استدعاء Canvas.invalidateSize () (على كل واحد) لحملهم على حساب التحجيم بهم.

والحاجة إلى القيام بذلك يعتمد على أي مرحلة من مراحل دورة حياة مكون كنت مضيفا الأطفال - أي عندما كنت تدعو "_drawColumLabels '

وأفترض كنت ترغب في scollbar لتظهر على _colSprite (و_rowSprite) إذا كان هناك المزيد من التسميات في ذلك مما يمكن عرضه في انها منطقة مرئية؟ إذا كان هذا هو الحال ستحتاج إلى استخدام شيء آخر من العفريت، مثل قماش كما العفريت لا يدعم التمرير.

وأنت قد تحتاج أيضا إلى تصحيح القيم س / ص / عرض / ارتفاع كل من المكونات الخاصة بك للتأكد من انهم ما تتوقعه - شيء أجد مفيدة مع القيام التخطيط هو رسم تخطيط على الورق وبدء الكتابة الأحجام والإحداثيات بحيث أستطيع أن أرى أن حساباتي صحيحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top