Событие EnterFrame останавливается рано в Короне

Я хотел бы расширить прямоугольник, увеличив его на 1, и остановить его, когда он достигнет ширины экрана. Тем не менее, он перестает расти в середине экрана в моем коде. Подскажите пожалуйста, чего мне не хватает?

W=display.contentWidth
H=display.contentHeight

local rect = display.newRect(0,0,0,100)
rect:setFillColor(0,255,0)

local function expand()
  rect.width= rect.width+1
  print(rect.width)
  if rect.width==W then
    Runtime: removeEventListener("enterFrame", expand)
  end
 end

Runtime: addEventListener("enterFrame", expand)

2 ответа

Решение

Не проверено, но это должно работать.

    W=display.contentWidth
    H=display.contentHeight

    local rect = display.newRect(0,0,0,100)
   rect:setFillColor(0,255,0)

   local function expand()
      rect.width= rect.width+1
      rect.x=0
      print(rect.width)
      if rect.width==W then
           Runtime :removeEventListener("enterFrame", expand)
      end
      end

    Runtime: addEventListener("enterFrame", expand)

Все виды в короне по умолчанию имеют верхнюю опорную точку, это означает, что если вы расположите их в точке (0,0,0,100), они начнутся в верхнем левом углу с высоты 100 пикселей. Значение x вида (в данном случае прямоугольник) будет слева от него.

Увеличение ширины этого прямоугольника не изменит положение прямоугольника. Просто сделайте это шире. Поэтому половина увеличения ширины находится за пределами экрана, в данном случае слева.

Вы можете узнать, что происходит в вашем коде, поместив rect.x=W/2 в начале кода как:

W=display.contentWidth
H=display.contentHeight

local rect = display.newRect(0,0,0,100)
rect:setFillColor(0,255,0)
rect.x = W/2          -- just put this in your code and see what actually happening

local function expand()
    rect.width= rect.width+1
    print(rect.width)
    if rect.width==W then
      Runtime :removeEventListener("enterFrame", expand)
    end
end
Runtime: addEventListener("enterFrame", expand) 

Теперь вы можете решить эту проблему с помощью следующего кода (я использовал переменную с именем: incrementVal просто для вашего удобства, для понимания отношения размера и положения прямоугольника в вашем коде):

W=display.contentWidth
H=display.contentHeight

local rect = display.newRect(0,0,0,100)
rect:setFillColor(0,255,0)

local incrementVal = 1
local function expand()
  rect.width= rect.width+incrementVal
  rect.x = rect.x + (incrementVal/2)  -- additional line, added for proper working
  if rect.width==W then
    Runtime :removeEventListener("enterFrame", expand)
  end
end
Runtime: addEventListener("enterFrame", expand)

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

Другие вопросы по тегам