As3按钮被点击50像素以下的按钮



我有一个问题。我已经缩小到我的按钮类,如果我点击按钮精灵区域下方50-100px,鼠标。触发事件监听器

我一度认为可能是子精灵的嵌套问题造成的,但即使直接将按钮添加到舞台上也会产生同样的效果。

我从头开始重写按钮类,同样的事情发生了。我不确定这是否会发生,因为我正在使用flex框架或其他东西编写纯as3。下面是按钮代码的类:

package org.project.ui 
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Graphics;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.display.Shape;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import org.project.controller.IController;
import flash.utils.getQualifiedClassName; 
/**
 * 
 * 
 */
public class CustomButton2 extends CustomSprite 
{
    protected var _button:Sprite;
    protected var _buttonFunction:Function = null;
    protected var _label:String = "";
    protected var _textField:TextField;
    protected var _textFormat:TextFormat;
    protected var _font:String = "Arial";
    protected var _fontSize:int = 12;
    protected var _fontColor:uint = 0x000000;
    protected var _buttonWidth:int = 110;
    protected var _buttonHeight:int = 30;
    public function CustomButton2(label:String, id:String, w:int, h:int, buttonFunction:Function = null) 
    {
        super(id, content);
        _label = label;         
        _buttonWidth = w;
        _buttonHeight = h;      
        _button = makeButton(label, w, h, buttonFunction);
        addButtonListeners();
        addChild(_button);
    }

    protected function makeButton(label:String, w:int, h:int, buttonFunction:Function = null):Sprite {
        _button = new Sprite();
        _button = drawButton(_button);
        _button.useHandCursor = true;
        _button.buttonMode = true;
        _button.mouseChildren = false;

        _button = addTextField(label, _button);
        return _button;
    }
    protected function addTextField(label:String, button:Sprite):Sprite {
        _textFormat = new TextFormat(_font, _fontSize, _fontColor, false, null, null, null, null, TextFormatAlign.CENTER);
        _textField = new TextField();
        _textField.defaultTextFormat = _textFormat;
        _textField.name = "textField_" + id;
        _textField.text = _label;
        _textField.selectable = false;
        button.addChild(_textField);
        return button;
    }
    protected function addButtonListeners():void {
        _button.addEventListener(MouseEvent.CLICK, mouseClick);
        _button.addEventListener(MouseEvent.ROLL_OVER, mouseRollover);
        _button.addEventListener(MouseEvent.ROLL_OUT, mouseRollOut);
    }
    protected function mouseClick(e:MouseEvent) {
        e.stopPropagation();
        if (_buttonFunction) {
            _buttonFunction();
        }
        changeButtonDisplay();
        trace("click");
    }
    protected function mouseRollover(e:MouseEvent) {
        changeButtonDisplay(0xFF0000);
    }
    protected function mouseRollOut(e:MouseEvent) {
        changeButtonDisplay(0xFFCC00);
    }
    protected function changeButtonDisplay(u:uint = 0xFF0000, w:int = 110, h:int = 30):void {
        _button = drawButton(_button, w, h, u);
    }

    protected function drawButton(button:Sprite, w:int = 110, h:int = 30, u:uint = 0xFFCC00):Sprite{
        button.graphics.beginFill(u);
        button.graphics.lineStyle(1);
        button.graphics.drawRoundRect(0, 0, w, h, 20);
        button.graphics.endFill();
        button = addTextField(_label, button);
        return button;
    }
}
}

很可能您的TextField扩展到按钮的其余部分。

它看起来好像你设置了文本字段的边界,所以它将是默认的(通常是100x100正方形)。

我建议明确设置文本字段的宽度和高度,以匹配您的按钮。

_textField.width = _buttonWidth;
_textField.height = _buttonHeight;

或者,如果你想让所有的文本无论如何都可见,你可以使用autoSize属性使文本字段的边界与实际文本匹配。

_textField.autoSize = TextFieldAutoSize.LEFT;

最新更新