Javascript 如何为DroidScript中的每个按钮创建具有不同值的回调函数?
我尝试在Android上使用DroidScript制作一个小游戏。它使用Javascript 这是一场纸牌游戏。每个按钮代表牌组中的一张牌。当我触摸一个按钮时,我希望应用程序会显示带有我触摸过的按钮(卡)值的弹出窗口Javascript 如何为DroidScript中的每个按钮创建具有不同值的回调函数?,javascript,android,droidscript,Javascript,Android,Droidscript,我尝试在Android上使用DroidScript制作一个小游戏。它使用Javascript 这是一场纸牌游戏。每个按钮代表牌组中的一张牌。当我触摸一个按钮时,我希望应用程序会显示带有我触摸过的按钮(卡)值的弹出窗口 function callbackFunction( value ) { app.ShowPopup(value); } //Called when application is started. function OnStart() { //Create a l
function callbackFunction( value )
{
app.ShowPopup(value);
}
//Called when application is started.
function OnStart()
{
//Create a layout with objects vertically centered.
lay = app.CreateLayout( "linear", "VCenter,FillXY" );
var deck = [1,2,3,4,5,6,7,8,9,10];
for (var card of deck)
{
var btn = app.CreateButton(card.toString(), 0.3, 0.1);
btn.SetOnTouch( callbackFunction );
lay.AddChild(btn);
}
//Add layout to app.
app.AddLayout( lay );
}
但这不会输出任何内容,因为我无法将值传递给回调函数。因此,我尝试使用一系列按钮:
//Called when application is started.
function OnStart()
{
//Create a layout with objects vertically centered.
lay = app.CreateLayout( "linear", "VCenter,FillXY" );
// Deck array
var deck = [1,2,3,4,5,6,7,8,9,10];
// array of buttons
var btns = [];
for (var card of deck)
{
var btn = app.CreateButton(card.toString(), 0.3, 0.1);
btns.push(btn);
btns[btns.length - 1].SetOnTouch(
() => { app.ShowPopup(btns[btns.length - 1].GetText())} );
lay.AddChild(btns[btns.length - 1]);
}
//Add layout to app.
app.AddLayout( lay );
}
问题是,每次我按下任何按钮,应用程序都会显示“10”。基本上,我希望调用回调,并将卡的值作为参数。所以我试了一下:
button.SetOnTouch( callbackFunction( button.GetText() );
但这不被接受为回调。我真的不知道如何将值传递到回调函数中。您可以非常简单地引用按钮,方法如下:
function callbackFunction(){
var button = this;
var name = this.GetText();
}
// Deck array
var deck = [1,2,3,4,5,6,7,8,9,10];
// array of buttons
var btns = [];
for (var card of deck)
{
var btn = app.CreateButton(card.toString(), 0.3, 0.1);
btns.push(btn);
eval("btns["+(btns.length - 1)+"].SetOnTouch(function(){callbackFunction("+card.toString()+");} );");
lay.AddChild(btns[btns.length - 1]);
}
function callbackFunction(name){
app.ShowPopup(name);
}
您还可以将自己的数据保存到按钮或任何类型的对象:
var deck = [1,2,3,4,5,6,7,8,9,10];
for (var card of deck)
{
var btn = app.CreateButton(card.toString(), 0.3, 0.1);
btn.SetOnTouch( callbackFunction );
btn.name = card.toString();
btn.index = deck.indexOf(card);
lay.AddChild(btn);
}
您可以使用数组保存按钮(最好使用我为您提供的第一个解决方案),方法如下:
function callbackFunction(){
var button = this;
var name = this.GetText();
}
// Deck array
var deck = [1,2,3,4,5,6,7,8,9,10];
// array of buttons
var btns = [];
for (var card of deck)
{
var btn = app.CreateButton(card.toString(), 0.3, 0.1);
btns.push(btn);
eval("btns["+(btns.length - 1)+"].SetOnTouch(function(){callbackFunction("+card.toString()+");} );");
lay.AddChild(btns[btns.length - 1]);
}
function callbackFunction(name){
app.ShowPopup(name);
}