0

Corona SDK シミュレーター、バージョン 2013.1137 (2013.6.7) で次のエラーが表示されます。

Corona Simulator Runtime error

File: ?

Attempt to perform arithmetic on field '?' (a function value)

stack traceback:
    [C]: ?
    ?: in function <?:172>
    ?: in function <?:218>

このエラーは、次のコード ( main.lua )によって発生します。

local d1 = display.newCircle(0, 40, 10)
local gNonEmpty1 = display.newGroup()
gNonEmpty1:insert(display.newCircle(0, 70, 10))
local gEmpty1 = display.newGroup()

transition.to(d1, { time = 1000, x = 100 })
transition.to(gNonEmpty1, { time = 1000, x = 100 })
transition.to(gEmpty1, { time = 1000, x = 100 })

local d2 = display.newCircle(0, 150, 10)
local gNonEmpty2 = display.newGroup()
gNonEmpty2:insert(display.newCircle(0, 180, 10))
local gEmpty2 = display.newGroup()

transition.to(d2, { time = 1000, x = 100, transition = easing.outExpo })
transition.to(gNonEmpty2, { time = 1000, x = 100, transition = easing.outExpo })
transition.to(gEmpty2, { time = 1000, x = 100, transition = easing.outExpo })

local d3 = display.newCircle(0, 260, 10)
local gNonEmpty3 = display.newGroup()
gNonEmpty3:insert(display.newCircle(0, 290, 10))
local gEmpty3 = display.newGroup()

transition.to(d3, { time = 1000, x = 100, easing.outExpo })
transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })
transition.to(gEmpty3, { time = 1000, x = 100, easing.outExpo })

エラーの原因となっている実際の行は、最後から 2 番目の行です。

transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })

コメントすることで確認できます。

コロナのドキュメントには、次のように記載されています。

You should have at least one DisplayObject inserted into a
Display Group before you change or read any of the properties
of the group (e.g., x, y, setReferencePoint(), etc.).

したがって、gEmpty1gEmpty2 、またはgEmpty3でtransition.to を使用すると、奇妙な動作が予想されるのは当然です。予想どおり、 transition.toの最初の 2 つのブロック (合計 6 回の呼び出し) は同じように動作しますが、デフォルトであるイージング、最初の 3 つの呼び出しの easing.linear 、およびの 3つの呼び出しのeasing.outExpoを除いては同じです。呼び出します。

transition.to呼び出しの書き方を間違えて、最後の 3 つのtransition.to呼び出しのように、イージング関数の指定でtransition=の部分が抜けているようなものを書くと、驚くべきことに、空でないグループを対象とするgNonEmpty3は、理解できないエラー メッセージの原因です。

質問

  1. 行番号もファイル名もなく、疑問符だけのエラーが発生した場合、Corona SDK で何をすべきですか?
  2. 172 と 218 の 2 つの行番号以外に、Corona SDK が意味のあるレポートを提供できないのはなぜですか?
  3. なぜこのエラーが発生するのですか? 私の理論では、transition.toはあまりエラー チェックを実行しません。空のグループをターゲットにすると、イージング関数を指定する際のエラーは見過ごされます。おそらくこれは、空のグループ プロパティを使用してはならないという事実に関連しているため、transition.to またはその内部更新コールバックがグループが空であることを検出し、何もせずに単純に戻る可能性があります。代わりに、空でないグループの場合、transition =が欠落しているため、必ずしもイージング コードではなく何らかのコードがトリガーされ、そのコードで実際のエラーが発生します。

config.lua

application = {
    content = {
        width = 320,
        height = 480, 
        scale = "letterBox",
        fps = 30
    } 
}

元の投稿 (廃止)

Corona SDK のエラーを追跡するのに苦労しています。このエラーにより、シミュレーターは次のメッセージを表示します。

Corona Simulator Runtime error

File: ?

Attempt to perform arithmetic on field '?' (a function value)

stack traceback:
    [C]: ?
    ?: in function <?:172>
    ?: in function <?:218>

そのようなメッセージをどのように解釈すればよいでしょうか? ところで、私はそれほど多くの行を含むソース ファイルを持っていません。

Button.lua という名前のファイルがあり、41 行目は例外の発生に関与しているようですが、その行からは発生していません。行は次のとおりです。

button:insert(b1)

その行を 2 つのプリントの間に折り込みました。

print("Before", button, b1) 
button:insert(b1)
print("After")

次のメッセージがシミュレータ コンソールに出力されます。

Corona Simulator[9801:f03] Before    table: 0x11daf4aa0    table: 0x1152363a0
Corona Simulator[9801:f03] After
4

1 に答える 1

0

あなたの行の代わりに:

transition.to(gNonEmpty3, { time = 1000, x = 100, easing.outExpo })

使用する :

transition.to(gNonEmpty3, { time = 1000, x = 100, transition =  easing.outExpo })

コロナでは、 や があるとこのようなエラーメッセージが出wrong syntaxますwrong logic。したがって、最初にこれらの問題を確認してください。(使用した) 行間に挿入printすることは、そのようなエラー行を見つけるための最良の解決策です。

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

于 2013-09-26T11:54:23.020 に答える