Ich erstelle ein 2D-Spiel mit Corona, um Codierung zu üben, und ich stecke auf ein Problem fest. Der Rücken eines der Feinde im Spiel ist wie eine holprige Rutsche geformt (irgendwie), wenn mein Charakter den Gegner auf seinem Rücken trifft, beginnt es vom Bildschirm zu rutschen. Wenn ein Gegner getroffen wird, wechselt das Spiel zu einem anderen Bildschirm und schaltet zurück.Mein Charakter gleitet vom Bildschirm, obwohl er neu positioniert wird und ich bin nicht sicher, warum
https://www.youtube.com/watch?v=xGoZ1jEG0YA&feature=youtu.be
Dies ist ein Video, das zeigt, was, 40 oder 45 Sekunden bei um geschieht sehen Sie das Zeichen zu gleiten beginnen.
Ich habe mehrere Dinge ausprobiert, um dies zu beheben, sowohl der Bounce-Faktor der Feinde und der Spieler ist auf Null gesetzt. Ich habe versucht, die lineare Velocity der x-Koordinate des Spielers auf Null zu setzen, aber das hat nicht funktioniert. Dies ist mein Code für die Kollisionserkennung.
function spawnEnemies()
temp = math.random(1, 4)
enemy = display.newSprite(beetle, beetleSequenceData)
enemy.x = _R + 100
enemy.y = _CY
enemy.hasBeenScored = false
physics.addBody(enemy, "dynamic", physicsData:get("beetle"))
enemy.xScale = -1
enemy.id = "enemy"
enemy.isFixedRotation = true
enemy:play()
group:insert(enemy)
enemy2 = display.newSprite(vulture, vultureSequenceData)
enemy2.x = _R + 100
enemy2.y = _CY - (enemy2.height * 0.25)
enemy2.hasBeenScored = false
physics.addBody(enemy2, "dynamic", physicsData:get("vulture"))
enemy2.xScale = -1
enemy2.gravityScale = -0.01
enemy2.id = "enemy2"
enemy2.isFixedRotation = true
enemy2:play()
specialGroup:insert(enemy2)
enemy3 = display.newSprite(scorpion, scorpionSequenceData)
enemy3.x = _R + 100
enemy3.y = _CY
enemy3.hasBeenScored = false
physics.addBody(enemy3, "dynamic", physicsData:get("scorpion"))
enemy3.xScale = -1
enemy3.id = "enemy3"
enemy3.isFixedRotation = true
enemy3:play()
group:insert(enemy3)
enemy4 = display.newSprite(bee, beeSequenceData)
enemy4.x = _R + 100
enemy4.y = _CY - (enemy4.height * 0.25)
enemy4.hasBeenScored = false
physics.addBody(enemy4, "dynamic", floatingEnemies:get("bee"))
enemy4.xScale = -1
enemy4.gravityScale = -0.01
enemy4.id = "enemy4"
enemy4.isFixedRotation = true
enemy4:play()
specialGroup:insert(enemy4)
if temp == 1 then
enemy2:removeSelf()
enemy3:removeSelf()
enemy4:removeSelf()
elseif temp == 2 then
enemy:removeSelf()
enemy3:removeSelf()
enemy4:removeSelf()
elseif temp == 3 then
enemy:removeSelf()
enemy2:removeSelf()
enemy4:removeSelf()
else
enemy:removeSelf()
enemy2:removeSelf()
enemy3:removeSelf()
end
end
function moveEnemies()
for a = group.numChildren, 1, -1 do
if group[a].x < 100 then
if group[a].hasBeenScored == false then
updateScore()
group[a].hasBeenScored = true
end
end
if group[a].x > _L - 100 then
group[a].x = group[a].x - 8
else
group:remove(group[a])
end
end
for b = specialGroup.numChildren, 1, -1 do
if specialGroup[b].x < 100 then
if specialGroup[b].hasBeenScored == false then
specialUpdateScore()
specialGroup[b].hasBeenScored = true
end
end
if specialGroup[b].x > _L - 100 then
specialGroup[b].x = specialGroup[b].x - 8
else
specialGroup:remove(specialGroup[b])
end
end
end
function onCollision(event)
local function removeOnPlayerHit(obj1, obj2)
if(obj1 ~= nil and obj1.id == "enemy") then
display.remove(obj1)
end
if(obj2 ~= nil and obj2.id == "enemy") then
display.remove(obj2)
end
if(obj1 ~= nil and obj1.id == "enemy2") then
display.remove(obj1)
end
if(obj2 ~= nil and obj2.id == "enemy2") then
display.remove(obj2)
end
if(obj1 ~= nil and obj1.id == "enemy3") then
display.remove(obj1)
end
if(obj2 ~= nil and obj2.id == "enemy3") then
display.remove(obj2)
end
if(obj1 ~= nil and obj1.id == "enemy4") then
display.remove(obj1)
end
if(obj2 ~= nil and obj2.id == "enemy4") then
display.remove(obj2)
end
end
local function showPlayerHit()
local tmr_onPlayerHit = timer.performWithDelay(1, playerHit, 1)
end
if event.phase == "began" then
if((event.object1.id == "enemy" or event.object1.id == "enemy2" or event.object1.id == "enemy3" or event.object1.id == "enemy4") and event.object2.id == "character") then
showPlayerHit()
removeOnPlayerHit(event.object1, nil)
elseif(event.object1.id == "character" and (event.object2.id == "enemy" or event.object2.id == "enemy2" or event.object2.id == "enemy3" or event.object2.id == "enemy4")) then
showPlayerHit()
removeOnPlayerHit(nil, event.object2)
end
end
end
Das obige Skript I-re schrieb mehr vereinfacht werden, jedoch wollte ich nicht die Logik, die Sie für drehten sich ändern: p –
Thank Sie glauben aber, Sie könnten mir bei diesem Kollisionsproblem helfen? – alexjr
Ich habe den Code aktualisiert, um zu zeigen, wie ich die Gegner spawne. Ich habe ein Punktesystem, das dem Benutzer Punkte gibt, wenn ein Objekt eine x-Koordinate erreicht. Kann dies vereinfacht werden, um meine Bedürfnisse zu erfüllen? – alexjr