#actionscript-3 #flash-builder #starling-framework
#actionscript-3 #flash-builder #starling-framework
Вопрос:
public class MyQuad extends Sprite
{
public var quad:Quad;
private var lbl:Label;
public function MyQuad(lbl1:String,quadx:int,quady:int,lblx:int,lbly:int,btnx,btny)
{
super();
quad=new Quad(100,100,Color.WHITE);
this.addChild(quad);
quad.width=100;
quad.height=75;
quad.x=quadx;
quad.y=quady;
lbl=new Label();
lbl.text=lbl1;
lbl.x=lblx;
lbl.y=lbly;
this.addChild(lbl);
var btn:Button=new Button(Assets.getTexture("Add"));
btn.width=30;
btn.height=30;
btn.x=btnx;
btn.y=btny;
this.addChild(btn);
}
}
У меня есть класс sprite
, который содержит много объектов отображения (quad, label, button). Я вызываю этот класс в другом, который расширяется screen
. В классе, который расширяет screen, я хочу добавить событие запуска к кнопке в классе sprite. Как я могу вызвать эту кнопку или событие запуска этой кнопки?
Комментарии:
1. По крайней мере, переменные должны быть видны классам, которые будут наследоваться. Вы также можете создать методы, которые будут переопределены.
Ответ №1:
Вы должны сделать кнопку общедоступной. Есть несколько способов сделать это, но самый простой — сделать это так, как вы уже сделали с переменной quad
.
Например:
public class MyQuad extends Sprite
{
// ... other class variable definitions
public var btn:Button;
public function MyQuad(lbl1:String,quadx:int,quady:int,lblx:int,lbly:int,btnx,btny)
{
super();
// Set up your other items
btn = new Button(Assets.getTexture("Add"));
// Set the properties on your Button as usual
}
}
Поскольку вы теперь определили btn
как public var
в своем классе, теперь это будет доступно публично через ссылку на экземпляр этого класса.
Например:
var myQuad:MyQuad = new MyQuad(...);
myQuad.btn.addEventListener(Event.TRIGGERED, onButtonTriggered);
function onButtonTriggered(e:Event):void {
// Handle button triggered event
}