2012-01-18 5 views
2

Первое сообщение, и я искренне извиняюсь, если на это ответили в любом другом сообщении, но я не смог найти решение проблемы, с которой я столкнулся, на этом или другом сайт. Я - новый программист, самостоятельно обучающийся с веб-учебниками и любым другим ресурсом, который я нашел. Я пытаюсь создать код, который будет порождать символы и позволяет вам их вызывать. Мне не удалось присвоить значение индекса отдельным экземплярам, ​​которые я создал с помощью функции for. Я попытался установить экземпляр как таблицу, так и групповой экранный объект. Если кто-то может указать мне в сторону любых ресурсов, чтобы получить более глубокое понимание таблиц и групповых экранных объектов для реализации Corona SDK Lua, я уверен, что моя проблема в том, что у меня недостаточно глубокое понимание от этих конкретных функций и от того, как они работают. Вот код, который я написал до сих пор.Объекты группового отображения в сравнении с таблицами в Corona Lua

-- Character Game 

require "sprite" 

require "ui" 

local background = display.newImage("Background Placeholder.png") 

halfW = display.viewableContentWidth/2 
halfH = display.viewableContentHeight/2 

local numCharacters = 20 

local roundedRect = display.newRoundedRect(365, 20, 110, 40, 8) 
roundedRect:setFillColor(0, 255, 0, 80) 

score = 0 

t = ui.newLabel{ bounds = { 370, 30, 100, 40 }, 
text = "Score " .. score, 
textColor = { 255, 0, 20, 255 }, 
size = 18, 
align = "center" 
} 

local scoreboard = function (event) 
    t:setText("Score " .. score) 
end 

Runtime:addEventListener("enterFrame", scoreboard) 


local group = display.newGroup() 

local character = sprite.newSpriteSheetFromData("Character Placeholder.png", require("Character Placeholder").getSpriteSheetData()) 

local characterSet1 = sprite.newSpriteSet(character,1,8) 

sprite.add(characterSet1,"character",1,8,1500,0) 

local characterplay = function(event) 
    score = score + group.points 
    group[i]:removeSelf() 
end 

do 
    for i=1, numCharacters do 
     group:insert(sprite.newSprite(characterSet1)) 
     group[i].xScale = .2 
     group[i].yScale = .2 
     group.points = 50 
     group[i]:setReferencePoint (display.BottomCenterReferencePoint) 
     group[i]:translate(halfW + math.random(-100, 100), halfH + math.random(-130, -110)) 
    end 

    timer.performWithDelay(500, charactermovie) 

    for i=1, 21 do 
     timer.performWithDelay(math.random(500, 5000) , charactermove) 

     charactermove = function(event) 
      transition.to(group[i], { time=10000, y = 580 }) 
      transition.to(group[i], { time=8000, x = math.random(0, 480) }) 
      transition.to(group[i], { time=7000, xScale = 1.5}) 
      transition.to(group[i], { time=7000, yScale = 1.5}) 
      group[i]:prepare("character") 
      group[i]:play() 
     end 

     group[i]:addEventListener("tap", characterplay) 
    end 
end 




charactermovie = function(event) 
group[i]:prepare("character") 
group[i]:play() 
end 

local function spriteListener(event) 
    print("Sprite event: ", event.sprite, event.sprite.sequence, event.phase) 
end 

for i, group in pairs(group) do print (group, i, v) end 

В настоящее время я получаю «попытку индексации поля»? в строке, содержащей этот код «group [i]: addEventListener (« tap », zombieplay)» при запуске и ошибка «nil key provided for property lookup» в строке «group [i]: removeSelf()», zombieplay ". Я попытался переместить код нарушения в различные местоположения, чтобы увидеть, является ли это проблемой, но я в значительной степени сталкиваюсь с той же ошибкой и считаю, что я не могу правильно понять индексы и ключи ... Я нашел что приложение функционирует так, как предполагалось, но я должен вызвать индексные ключи с 1 по 21, чтобы заставить их всех двигаться, хотя я призываю только 20 символов, а ошибки удаления строки removeSelf не удаляют отдельные символы. Я собираюсь попробовать написав модуль для персонажей и посмотрим, поможет ли это сделать это. Я опубликую свои результаты в ближайшее время.

+0

вы должны отступов вашего кода, чтобы мы могли легко прочитать – cctan

+0

спасибо я буду работать по очистке его в ближайшее время. –

+0

Это было правильно отформатировано сейчас. Если кто-то увидит, что я делаю неправильно, мы будем очень благодарны! Я попытался установить это в модуле, и я столкнулся в основном с одними и теми же проблемами, поэтому я попытаюсь придерживаться его, чтобы он работал таким образом. Это в основном то, что все равно войдет в модуль ... Спасибо заранее всем, кто это проверяет !!!! –

ответ

0

Ваши персонажи и функции charactermovie пытаются использовать переменную i, это вне t он выполняет функции.

Существует свойство события, называемого target, которое используется для вызова события. Вы хотите сделать что-то вроде этого:

local characterplay = function(event) 
    score = score + group.points 
    event.target:removeSelf() 
end