如何向自定义类发送单击该类的哪个对象

时间:2016-02-09 06:35:27

标签: haxe openfl

我在这个问题上的堆栈无法弄清楚如何正确地做到这一点。 [HAXE / OpenFL]

我想制作以下菜单。在屏幕上播放器显示三个图像/按钮。当玩家点击其中一个图像/按钮时,该按钮下会出现带有描述的文本。

我的,我不知道如何从Main发送(我创建此按钮并使用它们),将信息发送到此图像/按钮的自定义类,按下了什么特定的按钮/图像。

以下是示例代码,首先来自图像/按钮的自定义类:

class CusstomButtons extends Sprite {

var buttonImagePath:String;
var _buttonImagePath:String;

var buttonName:String;
var _buttonName:String;

var button1Btmp:Bitmap = new Bitmap ();
var button1Sprt:Sprite = new Sprite();

var button2Btmp:Bitmap = new Bitmap ();
var button2Sprt:Sprite = new Sprite();

var buttonText1:TextField = new TextField ();
var buttonText2:TextField = new TextField ();

public function new(buttonImagePath, buttonName) {

    super();

    _buttonImagePath = buttonImagePath;
    _buttonName = buttonName;

    createButton ();
}

public function createButton () :Void {

if (_buttonName == Button1){
button1Btmp = new Bitmap (Assets.getBitmapData (_buttonImagePath));
button1Sprt.addChild(button1Btmp);
addChild(button1Sprt);
//Here goes the code for button position and tweening
}

if (_buttonName == Button2){
button2Btmp = new Bitmap (Assets.getBitmapData (_buttonImagePath));
button2Sprt.addChild(button2Btmp);
addChild(button2Sprt);
//Here goes the code for button position and tweening
}
}

public function displayButtonDescrition () :Void {

    if (button1) {
        buttonText1.text = "Some text for Button 1"
        addChild(buttonText1);
        //Here goes code for button position and etc
    }
    if (button2) {
        buttonText2.text = "Some text for Button 2"
        addChild(buttonText2);
        //Here goes code for button position and etc
    }
}
}

这是来自main的代码:

class Main extends Sprite {
public var button1Menu:CusstomButtons;
public var button2Menu:CusstomButtons;

public function new () {

    super ();
    button1Menu = new CusstomButtons ("path/button1", "button1");
    button1Menu = new CusstomButtons ("path/button1", "button2");
}

public function createButtonMenu ():Void {

button1Menu.createButton();
addChild(button1Menu);
button2Menu.createButton();
addChild(button2Menu);

button1Menu.addEventListener(MouseEvent.CLICK, onClick);
button2Menu.addEventListener(MouseEvent.CLICK, onClick);
}

public function onClick (event:MouseEvent):Void {

if (event.currentTarget == button1Menu) {
    button1Menu.displayButtonDescrition();
    }
if (event.currentTarget == button2Menu) {
    button2Menu.displayButtonDescrition();
    }
}
}

主要问题是如何使用一个功能来显示不同的描述文本。

1 个答案:

答案 0 :(得分:3)

您可以在Button类中创建一个静态字段来保存所有已创建的实例。

static var instances = new Array();

然后在Button构造函数中存储当前正在创建的实例

instances.push(this);

最后,从主类调用按钮类中的静态方法,传递单击的实例:

public static function setClickedInstance(instance:Button):Void{
   //manipulation code goes here
}

在主类中,必要时调用该方法:

Button.setClickedInstance();

很抱歉,如果上面没有编译,因为我现在无法测试它。如果没有,可能只需要稍微调整一下。

另一种方法是在Button类本身中添加一个鼠标监听器,但是在主要类中你不能控制什么时候对#34;做出反应"在点击时以及何时没有。