ваш код очень грязный, но хочу указать на некоторые глюки, которые я обнаружил, которые, возможно, заставят ваш код работать:
Во-первых, когда вы создаете свои кнопки в одном экземпляре CustomScreen, они связываются с одной и той же переменной: CustomScreen.custButton
тогда custButton - это тот, у кого есть слушатели, а не ссылка на связанные кнопки: creditsButton и settingsButton
так, каждый раз, когда вы создаете кнопку, вы связываете custButton с другим объектом, также связывает слушателей, а предыдущая кнопка становится несвязанной и не прослушивает события
я рекомендую вам создать настоящий класс Button, из которого должна происходить каждая кнопка, этот «материнский» класс должен реализовывать своих собственных слушателей и отправлять события для событий мыши, которые вам нравятся ...
вот что я делаю:
Во-первых, создайте интерфейс кнопки, если вам нужен порядок:
package buttons
{
import flash.events.MouseEvent;
/**
* ...
* @author Joe Cabezas
*/
public interface IButton
{
function onClick(e:MouseEvent):void;
function onRollOver(e:MouseEvent):void;
}
}
Затем создайте класс Button, из которого должны быть получены все типы Button:
package buttons
{
import flash.display.Sprite;
import flash.events.MouseEvent;
/**
* ...
* @author Joe Cabezas
*/
public class Button extends Sprite implements IButton
{
public function Button()
{
this.agregarListeners();
}
private function agregarListeners():void
{
this.addEventListener(MouseEvent.CLICK, onClick);
this.addEventListener(MouseEvent.ROLL_OVER, onRollOver);
}
/* INTERFACE botones.IButton */
public function onClick(e:MouseEvent):void
{
}
public function onRollOver(e:MouseEvent) :void
{
}
}
}
Далее, каждый раз, когда вы хотите создать кнопку, просто расширяйте класс кнопок выше, и он автоматически настроит своих собственных слушателей, см. Этот пример MenuButton, расширяющего класс кнопок.
package buttons
{
import com.as3joelib.generators.TextFieldGenerator;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormatAlign;
/**
* ...
* @author Joe Cabezas
*/
public class BotonMenuSuperior extends Button
{
//constantes de diseño
private const padding:Number = 10;
private var fondo:Sprite;
private var color:uint;
private var text_string:String
private var text_field:TextField;
public function BotonMenuSuperior(text:String, color:uint)
{
super();
this.text_string = text;
this.color = color;
this.setup();
this.dibujar();
}
private function setup():void
{
//crear textfield
this.text_field = TextFieldGenerator.crearTextField(this.text_string, {
//border:true,
size:15,
embedfonts:false,
color:0xffffff
});
this.text_field.x = this.padding*0.75;
this.text_field.y = this.padding*0.75;
//crear fondo
this.fondo = new Sprite();
this.fondo.graphics.beginFill(this.color);
this.fondo.graphics.drawRect(0, 0, this.text_field.textWidth + 2*this.padding, this.text_field.textHeight + 2*this.padding);
this.fondo.graphics.endFill();
}
private function dibujar():void
{
this.addChild(this.fondo);
this.addChild(this.text_field);
}
//overriding functions to create the custom behavior of this button when mouse events happens
override public function onClick (e:MouseEvent):void{
//do here whatever you like when user clicks this button, like:
this.scaleX = this.scaleY = 1.5;
}
}
}
Как вы можете видеть, этот класс не определил / не создал своих слушателей, потому что он уже есть, затем вы можете создавать свои собственные события, модулируя класс Button для всплытия своих событий ...
надеюсь, это вам поможет!
также, подсказка, в вашем коде:
public class CustomScreen extends Sprite {
...
public function createButton(button:CustomBlitButton, btnOff:ButtonOff, btnOver:ButtonOver, text:String, location:Point, width:Number,
height:Number, textFormat:TextFormat, positionOffset:Number = 0):void {
custButton = button; //<-- this
custButton = new CustomBlitButton(btnOff, btnOver, location.x, location.y, width, height, text,
textFormat, positionOffset);
addChild(custButton);
...
}
}
как первый параметр будет полезен с этим кодом?
это как:
public funcion(a:Number, b:number):Number{
var xa:Number = a;
xa = 2;
return xa + b;
}
пожалуйста, создайте интерфейсы, это сделает ваш код более упорядоченным
до свидания!
PD: я говорю по-испански, так что извините, если плохо говорю по-английски