gpt4 book ai didi

javascript - 如何为 DroidScript 中的每个按钮创建具有不同值的回调函数?

转载 作者:行者123 更新时间:2023-11-29 18:27:52 25 4
gpt4 key购买 nike

我尝试在 Android 上使用 DroidScript 制作一个小游戏。它使用 Javascript。

这是一个纸牌游戏。每个按钮代表一副牌中的一张牌。当我触摸一个按钮时,我希望该应用程序会显示弹出窗口,其中包含我触摸的按钮(卡片)的值。

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();
}

您还可以将自己的数据保存到按钮或任何类型的对象中:

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);
}

您无论如何都可以使用数组来保存按钮(最好使用我提供给您的第一个解决方案),方法是:

// 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);
}

关于javascript - 如何为 DroidScript 中的每个按钮创建具有不同值的回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57935303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com