Android에서 DroidScript를 사용하여 작은 게임을 만들려고했습니다. 자바 스크립트를 사용합니다.
카드 게임입니다. 각 버튼은 덱의 카드를 나타냅니다. 버튼을 터치하면 터치 한 버튼 (카드)의 값과 함께 앱이 팝업 될 것으로 예상합니다.
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);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다