2011-09-08 1 views
0
function World:draw() 
    --draw the tiles based on 2d int array 
    --draw the player 
    --draw the monsters 
    --show what you need to based on camera 
    self.map[0][0]=display.newImage("dirt_tile.png",i,j) 
end 

私は、イベントハンドラを使用する場合、私はそこに私の世界のオブジェクトのプロパティのいずれかにアクセスすることはできません。変数のスコープは、イベントハンドラを扱うとき

Runtime:addEventListener("enterFrame",World.draw) 

私が使用できるのEventListenerの異なる種類がありますが自己参照コンテキストがそのまま維持されるように、eventListenerをインスタンス化する別の方法がありますか?

答えて

2

ここに行く:

World = { count=0 } 

function World:enterFrame() 
    self.count = self.count + 1 
    print("count = " .. self.count) 
end 

Runtime:addEventListener("enterFrame", World) 

は詳細についてはthis API reference pageを参照してください。

+0

私は "function World:new()"コンストラクタで定義した "World"というオブジェクトを持っています。私は "ローカル自己= {}"と呼ばれるその関数のテーブルを持って、私は "マップ"(または2次元のint配列)でそれを埋める。私はあなたのものに合うように自分のコードを変更してもそれにアクセスすることはできません。あなたの答えでは、私が作成したオブジェクトのプロパティにアクセスしようとしている間、 "World"という名前の配列とその配列の "count"という名前のプロパティにアクセスしていました。 – Evan

+0

テーブルとオブジェクトはLuaではまったく同じものです。他の問題も起こっているかもしれませんが、ソースコードがなければ、私は本当に分かりません。 –

+0

あなたの問題と重複する最小限の作業用ソースコードを投稿したい場合は、それをさらに見てください。 –

0

local self = {}という名前のテーブルでは、暗黙のselfパラメータと衝突する可能性があります。

function World:draw()は、World.draw = function(self)のLua構文砂糖です。 selfを使用すると、実行時イベントハンドラが関数に渡す最初のパラメータを使用しています(APIから判断するとeventを渡します)。これはselfとなります。

local thisのように)アクセスするテーブルの名前を付けて、それが動作するかどうかを確認してください。

+0

私はそれを読んで、彼はhis:new()関数でのみ 'local self = {}'を実行しました。 – daurnimator

関連する問題