Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 DrawRoundRect大小存在问题_Actionscript 3_Graphics_Mobile_Drawing - Fatal编程技术网

Actionscript 3 DrawRoundRect大小存在问题

Actionscript 3 DrawRoundRect大小存在问题,actionscript-3,graphics,mobile,drawing,Actionscript 3,Graphics,Mobile,Drawing,我正在尝试使用ActionScript 3.0创建一个自定义按钮。我正在起诉一个圆形矩形作为背景,但我对它的大小有一个问题 这是我的自定义按钮类: package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; import flash.display.Shape; public class customButton ext

我正在尝试使用ActionScript 3.0创建一个自定义按钮。我正在起诉一个圆形矩形作为背景,但我对它的大小有一个问题

这是我的自定义按钮类:

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.display.Shape;

    public class customButton extends Sprite
    {
        private var background:Shape;
        public var bgColor:uint;
        public var borderColor:uint;
        public var borderSize:uint;
        public var cornerRadius:uint;
        private var label:TextField;

        public function customButton(text:String)
        {
            super();

            this.opaqueBackground = 0xFF0000;

            background = new Shape();
            borderSize = 1;
            borderColor = 0x666666;
            bgColor = 0xFFCC00;
            cornerRadius = 9;

            label = new TextField();
            label.text = text;

            var format:TextFormat = new TextFormat();
            format.font = "Verdana";
            format.color = 0;
            format.size = 38;
            format.underline = true;

            label.defaultTextFormat = format;

            addChild(background);
            addChild(label);

            buttonMode = true;
            mouseChildren = false;
        }

        public function draw():void
        {
            background.graphics.lineStyle(borderSize, borderColor);
            background.graphics.beginFill(bgColor);
            background.graphics.drawRoundRect(0, 0, this.width, this.height cornerRadius);
            background.graphics.endFill();
        }
    }
}
这是用来显示按钮的代码:

    public function Test01()
    {
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        button = new customButton("Button");
        button.x = 200;
        button.y = 300;
        button.width = 200;
        button.height = 100;
        button.draw();

        addChild(button);
    }
button.width = 200;
button.height = 100;
如果我将此大小设置为按钮:

    public function Test01()
    {
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        button = new customButton("Button");
        button.x = 200;
        button.y = 300;
        button.width = 200;
        button.height = 100;
        button.draw();

        addChild(button);
    }
button.width = 200;
button.height = 100;
我得到以下信息:

但我将其设置为按钮大小:

按钮宽度=40; 按钮高度=20

(此大小与customButton类中使用的相同)。我得到:

我不知道为什么当我使用(40,20)的尺寸时,我得到的矩形比那个尺寸小

有什么建议吗

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.display.Shape;

    public class customButton extends Sprite
    {
        private var background:Shape;
        public var bgColor:uint;
        public var borderColor:uint;
        public var borderSize:uint;
        public var cornerRadius:uint;
        public var bWidth:Number;
        public var bHeight:Number;
        private var label:TextField;

        public function customButton(text:String, bW:Number, bH:Number)
        {
            super();
            this.bWidth = bW;
            this.bHeight = bH;

            background = new Shape();
            borderSize = 1;
            borderColor = 0x666666;
            bgColor = 0xFFCC00;
            cornerRadius = 9;

            label = new TextField();
            label.text = text;

            var format:TextFormat = new TextFormat();
            format.font = "Verdana";
            format.color = 0;
            format.size = 38;
            format.underline = true;

            label.defaultTextFormat = format;

            addChild(background);
            addChild(label);

            buttonMode = true;
            mouseChildren = false;
            background.graphics.lineStyle(borderSize, borderColor);
            background.graphics.beginFill(bgColor);
            background.graphics.drawRoundRect(0, 0, bWidth, bHeight, cornerRadius);
            background.graphics.endFill();
        }

    }
}

尝试此操作

因为您直接将宽度设置为
精灵
,它会更改精灵的大小,而不会更改正在绘制的背景的大小

在customButton类中添加一些代码:

private var _width:Number = 10;
private var _height:Number = 10;

override public function get width():Number { return _width; }      
override public function set width(value:Number):void 
{
    _width = value;
    draw ();
}

override public function get height():Number { return _height; }        
override public function set height(value:Number):void 
{
    _height = value;
    draw ();
}

private function draw():void
{
    background.graphics.clear ()
    background.graphics.lineStyle(borderSize, borderColor);
    background.graphics.beginFill(bgColor);
    background.graphics.drawRoundRect(0, 0, _width, _height, cornerRadius);
    background.graphics.endFill();
}

使用此代码,您将能够每次更改背景大小,并且不会影响其他组件。

您的roundRect类大小已固定,因此在增加宽度时不会进行更改

为宽度(Bwidth)和高度(Bheight)创建两个公共参数并访问它


谢谢你的回答。如果我使用它,将大小设置为(40,20),我会得到这样的结果:这是正确的。Bhe按钮背景为40x20像素。但是您使用的是
opaqueBackground=0xFF0000
属性,因此这意味着在本例中,displayObject的所有背景都将填充为红色背景。您拥有的大红色区域是文本字段影响,因为默认情况下TF大小为100x100。要防止出现这种情况,应使用:
label.autoSize=TextFieldAutoSize.LEFT