Событие 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)
Продолжайте кодировать..............:)