0

1つのクラスには、次のように2つのクラスを呼び出す2つの「ボタン」があります。

btn1 = display.newImage("1.png")
btn2 = display.newImage("2.png")
btn1:addEventListener("touch", onSceneTouch)
btn2:addEventListener("touch", onSceneTouch2)

これに伴う問題は、2つのメソッド(onSceneTouch、onSceneTouch2)が同じことを行うことです。唯一の違いは、どのボタンがタッチされたかに応じてフラグを設定することです。私のメソッドは次のようになります。

function onSceneTouch(  event )
//do something here     
end

検索してみたところ、この記事を見つけてフォローしようとしました。ボタンにIDを追加し、メソッドで呼び出しましたが、IDはnilでした。代わりに、btn1.name = "name"のようにボタンの名前を設定し、メソッドでself.nameを呼び出そうとすると、もちろん、名前は"touch"を返します。どのボタンがタッチされたかをメソッドに伝えるにはどうすればよいですか?

4

3 に答える 3

2

リンクした記事によると、コードは次のようになります。

function onSceneTouch(self, event)
  local button_id = self.id
  --do something here     
end
btn1 = display.newImage("1.png")
btn2 = display.newImage("2.png")
btn1.id = 'Button1'
btn2.id = 'Button2'
btn1.touch = onSceneTouch
btn2.touch = onSceneTouch
btn1:addEventListener("touch")
btn2:addEventListener("touch")

動かないの?

于 2013-03-14T05:38:12.680 に答える
1

回答1の例は問題なく機能するはずですが、テーブルリスナーの代わりに関数リスナーを実行するよりも少し手間がかかります。私はそれを次のように書いたでしょう:

function onSceneTouch(event)
    local target = event.target  -- this is the actual button that was touched.
    if event.phase == "ended" then
         -- do your work here 
         print(target.id) -- prints "Button1" or "Button2"
    end
    return true -- important!
end

btn1 = display.newImage("1.png")
btn2 = display.newImage("2.png")
btn1.id = 'Button1'
btn2.id = 'Button2'
btn1:addEventListener("touch", onSceneTouch)
btn2:addEventListener("touch", onSceneTouch)

同じことを別の方法で。

于 2013-03-18T01:58:28.937 に答える
0

enter code here単一のイベントリスナーを使用し、一意の名前を使用してこれを呼び出した人を特定します。

 function onSceneTouch(  event )
        local objectName=event.target.name    
        if objectName==1 then
            flag1=true
        else
            flag2=true 
        end


    end

btn1 = display.newImage("1.png")
btn1.name=1

btn2 = display.newImage("2.png")
btn1.name=2


btn1:addEventListener("touch", onSceneTouch)
btn2:addEventListener("touch", onSceneTouch)
于 2013-12-18T13:53:00.897 に答える