如何将 class 的哪个对象被单击返回自定义 class
How to send back to custom class which object of that class was clicked
我对这个问题很困惑,不知道如何正确解决。 [Haxe/OpenFL]
我想制作如下菜单。在播放器屏幕上显示三个 images/buttons。当玩家点击其中一个 images/buttons 时,该按钮下方会出现一段带有描述的文字。
我的是,我不知道如何从 Main(我创建此按钮并使用它们的地方)发送信息,将信息发送到此 images/buttons 的自定义 class,具体 button/image 被按下。
这是示例代码,首先来自 images/buttons 的自定义 class:
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();
}
}
}
主要问题是如何用一个函数显示不同的描述文字。
您可以在按钮中创建一个静态字段 class 来保存它的所有已创建实例。
static var instances = new Array();
然后在 Button 构造函数中存储当前正在创建的实例
instances.push(this);
最后,从主class调用按钮class中的静态方法,传递点击的实例:
public static function setClickedInstance(instance:Button):Void{
//manipulation code goes here
}
并且在主要class必要时调用方法:
Button.setClickedInstance();
抱歉,如果以上内容无法编译,因为我现在无法对其进行测试。如果没有,它可能只需要稍微调整一下。
另一种方法是在按钮 class 本身中添加一个鼠标侦听器,但是这样一来您将无法在主要 class 中控制何时 "react" 点击和什么时候没有。
我对这个问题很困惑,不知道如何正确解决。 [Haxe/OpenFL]
我想制作如下菜单。在播放器屏幕上显示三个 images/buttons。当玩家点击其中一个 images/buttons 时,该按钮下方会出现一段带有描述的文字。
我的是,我不知道如何从 Main(我创建此按钮并使用它们的地方)发送信息,将信息发送到此 images/buttons 的自定义 class,具体 button/image 被按下。
这是示例代码,首先来自 images/buttons 的自定义 class:
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();
}
}
}
主要问题是如何用一个函数显示不同的描述文字。
您可以在按钮中创建一个静态字段 class 来保存它的所有已创建实例。
static var instances = new Array();
然后在 Button 构造函数中存储当前正在创建的实例
instances.push(this);
最后,从主class调用按钮class中的静态方法,传递点击的实例:
public static function setClickedInstance(instance:Button):Void{
//manipulation code goes here
}
并且在主要class必要时调用方法:
Button.setClickedInstance();
抱歉,如果以上内容无法编译,因为我现在无法对其进行测试。如果没有,它可能只需要稍微调整一下。
另一种方法是在按钮 class 本身中添加一个鼠标侦听器,但是这样一来您将无法在主要 class 中控制何时 "react" 点击和什么时候没有。