Nano Hash - криптовалюты, майнинг, программирование

попытка индексировать upvalue charfaceright (нулевое значение)

Я новичок в программировании Corona SDK и LUA. Я пытаюсь переключить спрайты в их направлении, эта ошибка показывает попытку индексировать upvalue "charfaceright" (нулевое значение)

module (..., package.seeall)

display.setStatusBar( display.HiddenStatusBar )
system.activate("multitouch")


function  new()

local gameGroup = display.newGroup()

local physics = require("physics")
physics.start();

local sprite = require("sprite")

local speed = 2
local move = 0
local charfaceright
local charfacerunright
local Xposchar = 50
local Yposchar = 200
local  sheetrunright = graphics.newImageSheet( "sprite/vhanrunright.gif", { width=67, height=84, numFrames=4 } )



local background1 = display.newImage( "background/menu_background.png", -50, 0 )

local line = display.newLine(0, 240, 0, 0)
line.x = 2
line.y = 231
physics.addBody(line, "static", {density = 1.0, friction = 0.3, bounce = 0.2 })

local floorlvl1 = display.newImage( "floor/kinabanlvl1flor.gif")
floorlvl1.x = 500
floorlvl1.y = 245
physics.addBody(floorlvl1, "static", {density = 1.0, friction = 0.3, bounce = 0.2})


local buttonleft = display.newCircle( 0, 0, 20 )
buttonleft.x = 35
buttonleft.y = 285
buttonleft.alpha = 0.8


local buttonrth = display.newCircle( 0, 0, 20 )
buttonrth.x = 85
buttonrth.y = 285
buttonrth.alpha = 0.8

local buttonat = display.newCircle( 0, 0, 20 )
buttonat.x = 360
buttonat.y = 285
buttonat.alpha = 0.8

local buttonjump = display.newCircle( 0, 0, 20 )
buttonjump.x = 425
buttonjump.y = 285
buttonjump.alpha = 0.8

charfaceright = display.newImage( "sprite/vhanfaceright.gif" )
charfaceright.x = Xposchar
charfaceright.y = Yposchar
physics.addBody(charfaceright, "dynamic", {bounce = 0.2})

gameGroup:insert(background1)

local function movement( event )

    Xposchar = Xposchar + move

    if Xposchar >= 50 then
    background1.x = background1.x - move
    floorlvl1.x = floorlvl1.x - move
    end



end

Runtime:addEventListener("enterFrame", movement)


local function stop (event)
    if event.phase =="ended" then

        move = 0;

    end     
end

Runtime:addEventListener("touch", stop)

когда я удаляю charface и меняю его на лист спрайтов, появляется ошибка

function moveright( event )

     move = speed;


     charfaceright:removeSelf()
     charfaceright = nil

     charfacerunright = display.newSprite( sheetrunright, { name="runvhanright", start=1, count=4, time=1000 } )
     charfacerunright.x = Xposchar
     charfacerunright.y = Yposchar
     physics.addBody(charfacerunright, "dynamic", {bounce = 0.2})
     charfacerunright:play()



end

buttonrth:addEventListener("touch", moveright)


function moveleft( event )


    move = - speed;

end

buttonleft:addEventListener("touch", moveleft)

function moveup( event )

if Yposchar >= 200 then

    Yposchar = Yposchar - 50

    end
end

buttonjump:addEventListener("touch", moveup)

return gameGroup

end
07.01.2014

Ответы:


1

Это проблема с вашим EventListener. Вы хотите изменить изображение спрайта нажатием кнопки, тогда я предпочитаю, чтобы вы использовали прослушиватель "tap" вместо "touch". Поскольку ваше действие по удалению изображения может произойти во время либо event.phase=="began", либо event.phase=="moved", либо event.phase=="ended" (обычно 1-го и последнего).

Поэтому попробуйте изменить функцию move right и buttonrth EventListener следующим образом:

function moveright( event )
     move = speed;

     if(charfaceright~=nil)then  -- Check whether the sprite exists
        charfaceright:removeSelf()
        charfaceright = nil
     end

     charfacerunright = display.newSprite( sheetrunright, { name="runvhanright", start=1, count=4, time=1000 } )
     charfacerunright.x = Xposchar
     charfacerunright.y = Yposchar
     physics.addBody(charfacerunright, "dynamic", {bounce = 0.2})
     charfacerunright:play()
end
buttonrth:addEventListener("tap", move right)  -- changed "touch" to ---> "tap"

Продолжайте кодировать ...................... :)

08.01.2014

2

charfaceright кажется локальным для вашей функции new (хотя мне трудно сказать, потому что ваш отступ не очень последователен или чист). Поэтому, если вы не создаете свою функцию moveright внутри функции new, у нее не будет доступа к локальной переменной charfaceright.

08.01.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..