1

トータルn00bの質問をお許しください。私はコロナSDK(およびプログラミング全般、VBを節約し、フランクザメッティの優れた本を読んでいます)に不慣れで、問題に遭遇しました。いくつかのことを試し、広範囲に検索しましたが、これについて頭を悩ませることはできません...

背景: 学習課題として、6 つの「物」があるゲームを書こうとしています。各物体には、ランダムな特性に基づいて「スコア」が与えられ、スコアが最も高い物体が「正しい」選択となります。ユーザーが選択肢をタップすると、正しく選択したかどうかが通知されます。

私は、物を生み出す「ドローレベル」機能に取り組んでいます。この関数は、画面上に 6 つの画像を生成し、それらの 6 つの画像のそれぞれをタップで識別できるようにする必要があります。これは私が書いたコードです:

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc.positionTapped);

end

これにより、画面上のものが楽しく作成されます。次に、モノのタップに反応する関数を定義します。

function gc:positionTapped(event)
  utils:log(sceneName, "positionSelected()");
  print(self.id);

end

utils:log 関数はデバッグ用にあり、正しく機能します。しかし、print self.id は機能しません。私はそれが私に物IDを与えることを期待しています(これはループで定義されているように i である必要があります)。'nil' を返します。

spawn ループを次のように変更してみました。

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc:positionTapped);

 end

そして、ループは「関数の引数が ) の近くにあると予想されます」でクラッシュします。

だから私はそれを再び次のように変更しました:

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc:positionTapped());

end

「Runtime error assertion failed!」でクラッシュします。ループ中に、次のようにします。

 thingy[i]:addEventListener("tap", gc.positionTapped(thingy[i].id));

そしてそうです:

 thingy[i]:addEventListener("tap", gc.positionTapped(i));

私は3日間読んだりグーグルしたりしてきましたが、まだ答えが見つかりません。n00bに同情して私を助けていただければ、本当にありがたいです。:-)

4

1 に答える 1

2

これを試して:

local thingy = {}
local positionSpacing = 55

function tapHandler(event)
    print(event.target.name)
end

for i=1,6,1 do
  thingy[i] = display.newImageRect("Icon.png", 50, 50, true);
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  thingy[i].name = ("thingy"..i);
  thingy[i]:addEventListener("tap",tapHandler)
end

コーディングを続ける.......

于 2013-11-05T05:00:13.853 に答える