Скачане върху движещи се платформи

Току-що започнах да използвам Corona SDK и имам някои проблеми с прилагането на физика върху движещи се платформи.

По принцип имам платформи, които се движат отдясно наляво и когато обект кацне върху платформата, няма триене, обектът не успява да се движи с платформата, така че след като платформата се премести отдолу на обекта, обектът пада на дъното на екрана. Някой друг имал ли е този проблем? Предполагам, че може би физически обект губи някои от атрибутите си, но не знам кои.

Искам обектът да може да се движи с платформата в същата посока и скорост.

Ето примерен код:

.....
elements = display.newGroup()
elements.anchorChildren = true
elements.anchorX = 0
elements.anchorY = 1
elements.x = 0
elements.y = 0
screenGroup:insert(elements)


player = display.newImageRect("player.png",30,50)
player.anchorX = 50
player.anchorY = 50
player.x = 80
player.y = display.viewableContentHeight - 80
physics.addBody(player, "static", {density=.1, bounce=0.1, friction=1.0})
player:setLinearVelocity( 100, -600 )
screenGroup:insert(player)
.....


....
local gameStarted = false

function jumptoplatform(event)
   if event.phase == "began" then
        if gameStarted == false then
             player.bodyType = "dynamic"
             addplatformsTimer = timer.performWithDelay(1000, addplatforms, -1)
             moveplatformsTimer = timer.performWithDelay(2, moveplatforms, -1)
             gameStarted = true
             player:setLinearVelocity( 100, -600 )
        else 
         player:setLinearVelocity( 100, -600 )
      end
    end
end


function moveplatforms()
        for a = elements.numChildren,1,-1  do
            if(elements[a].x > -150) then
                elements[a].x = elements[a].x - 6
            else 
                elements:remove(elements[a])
            end 
        end
end



function addplatforms()
    platform1 = display.newImageRect("platform.png",200,80)
    platform1.anchorX = 0
    platform1.anchorY = 1
    platform1.x = 450
    platform1.y = yPosition()
    physics.addBody(platform1, "static", {density=1, bounce=0.1, friction=1.0})
    elements:insert(platform1)

end
.....

Може би трябва да добавя функция onCollision, за да се справя?, или да използвам стави? Всяка идея ще бъде оценена..


person renancar    schedule 14.07.2014    source източник


Отговори (1)


Когато създавате физическо тяло, "статичен" тип тяло означава, че телата не се движат при симулация и се държат така, сякаш имат безкрайна маса. Статичните тела могат да се преместват ръчно от потребителя, но те не приемат прилагането на скорост. Статичните тела се сблъскват само с динамични тела, а не с други статични или кинематични тела. (Повече подробности тук: http://docs.coronalabs.com/api/type/Body/bodyType.html)

Опитайте така:

physics.addBody(player, "dynamic", {density=.1, bounce=0.1, friction=1.0})
person Teddy Engel    schedule 14.07.2014