2014-07-18 4 views
0

gideros 게임에서 이벤트가 발송되었습니다. 어떤 메신저의 확실하지이라고 나는 내가 다음과 같이 편지 클래스가 0Gideros 이벤트가 트리거 된 후 null로 표시됩니다.

의 길이가있는 테이블 반환 (객체가 트리거) 이벤트를 액세스하려고하면

GridLetter = gideros.class(Sprite) 

function GridLetter:init(letter) 

    self.image = Bitmap.new(Texture.new("GridLetters/"..letter.."Grid.png")) 
    self.image:setAnchorPoint(0.5, 0.5) 
    self.focus = false 
    self:updateVisualState(true) 
    self:addEventListener(Event.MOUSE_DOWN, self.onMouseDown, self) 
end 

function GridLetter:onMouseDown(event) 
    if self:hitTestPoint(event.x, event.y) then 
     self.focus = true 
     self:dispatchEvent(Event.new("GridLetterDown")) 
     event:stopPropagation() 
    end 
end 

function GridLetter:updateVisualState(state) 
    if state then 
     self:addChild(self.image) 
    end 
end 

코드를

grid = Core.class(Sprite) 

local letterArr = {"a","b","c","d","e","f","g","h","u","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"} 
local gridboard = {{},{},{},{}} 

local letterBoxArr = {{},{},{},{}} 
local letterBox 

function grid:init(params) 

    local widthOfSingle = (application:getContentWidth()/4) 
    for rowCount = 1,4 do 
     for colCount = 1,4 do 
      rand = math.random(1, 26) 
      gridboard[rowCount][colCount] = letterArr[rand] 
     end 
    end 

    for rowCount = 1,4 do 
     for colCount = 1,4 do 
      letterBox = GridLetter.new(gridboard[rowCount][colCount]) 
      letterBoxArr[rowCount][colCount] = {letterBoxItem=letterBox} 
      letterBoxArr[rowCount][colCount].letterBoxItem:setPosition(((widthOfSingle * colCount) - (widthOfSingle/2)), 100 * rowCount) 
      letterBoxArr[rowCount][colCount].letterBoxItem.letter = gridboard[rowCount][colCount]; 
      letterBoxArr[rowCount][colCount].letterBoxItem:addEventListener("GridLetterDown", LetterDown, self) 
      self:addChild(letterBoxArr[rowCount][colCount].letterBoxItem) 
     end 
    end 
end 

function LetterDown(event) 
    print(event.target.letter) 
end 

내가 이러한 이미지 중 하나를 클릭

는 이벤트가 해고되고 코드는 LetterDown 이벤트에서 실행 않지만, 이벤트 매개 변수에 액세스하려고 할 때, 그것은 반환 :

즉,이 클래스는 다음과 같습니다 구현
grid.lua:32: attempt to index field 'target' (a nil value) 
stack traceback: 
    grid.lua:32: in function <grid.lua:31> 
    GridLetter.lua:15: in function <GridLetter.lua:12> 

어떤 아이디어 나 해결책이 있습니까?

하면 교체 할 때 :

print(event.target.letter) 

그것은 닐을 인쇄

print(event.x) 

한다.

미리 도움을 주셔서 감사합니다.

감사합니다, 워렌이 응답하지 않습니다

답변

0

.. gideros 포럼에 사람뿐만 아니라 광고 형식, 덕분에 나를 도왔다.

그래서 내 onMouseDown 이벤트에서 일반 이벤트에 .letter를 할당하고있었습니다. 그래서 로컬 var를 만들고 이벤트를 할당하기 전에 변수에 할당 된 문자를 유지합니다.

앞으로 다른 사람들에게 도움이되기를 바랍니다. 모든 응답에 대한

function GridLetter:onMouseDown(event) if self:hitTestPoint(event.x, event.y) then self.focus = true local e = Event.new("GridLetterDown") e.letter = self.letter self:dispatchEvent(e) event:stopPropagation() end end

감사합니다.

0

은 (내가 언급 것,하지만 이상하게 담당자가 필요합니다).

event에는 target 입력란에 아무 것도 표시되지 않아 오류가 발생했습니다.

당신은 그 위에 반복하여 테이블에 무엇을 알아낼 수 (glideros가 정의하는 경우, 또는 꽤 테이블 인쇄 기능을 사용하여 한/당신은 자신을 하나의 정의) :

for k, v in pairs(target) do print(k, v) end 

확실하지 않은 경우

print(not event.target and "event.target does not exist" or event.target.letter) 

당신은 여기 A and B or C 구조에 대해 읽을 수 있습니다 : http://lua-users.org/wiki/TernaryOperator

,536 target가 항상 존재한다면, 당신은 또한이 같은 작업을 수행 할 수 있습니다

편집 : 수신 한 이벤트가 GridLetter 개체와 함께 발생한다고 가정하면 self.letter에 아무 것도 설정하지 않은 것입니다. 아마 필드가 도움이 될 것입니다 설정 : 나는 그것을 가지고

function GridLetter:init(letter) 
    self.letter = letter -- Forgot this? 
    self.image = Bitmap.new(Texture.new("GridLetters/"..letter.."Grid.png")) 
    self.image:setAnchorPoint(0.5, 0.5) 
    self.focus = false 
    self:updateVisualState(true) 
    self:addEventListener(Event.MOUSE_DOWN, self.onMouseDown, self) 
end 
+0

그래서 self.letter = letter를 init 메소드에 추가했습니다. 그러나 여전히 데이터가 없습니다. nil을 리턴합니다. 이상한 것은 x와 y 좌표조차도 nil을 반환한다는 것입니다. 내가 사건들을 어떻게 연관 짓고 있는지 아마 상관 없지? 다른 방법으로 이벤트를 호출해야합니까, 아니면이를 수용 할 수 있습니까? – EpicJoker

+0

그래, 문서를 조금 봤어. 문제는 다음과 같습니다 :'self : dispatchEvent (Event.new ("GridLetterDown"))'이벤트에 전달 된 데이터가 없습니다. 'local ev = Event.new ("GridLetterDown"); ev.letter = 편지; ev.x = event.x, ev.y = event.y; ev.target = self; self : dispatchEvent (ev)' Gideros에 익숙하지 않기 때문에 이것이 제대로 작동해야한다고 생각합니다. :) – Advert

+0

감사합니다. 오늘 귀하의 솔루션을 살펴보고 작동 여부를 알려 드리겠습니다. 지금까지 친절한 도움을 주셔서 감사합니다. – EpicJoker