Also baue ich ein Spiel mit Corona (in lua), wo es mehrere Objekte mit physikalischen Attributen gibt, und versuche diese zu speichern, manipuliere sie so, dass ich Kollisionen machen kann Handhabung einfacher ... die Idee ist, dass keine 2 der 3 Objekte kollidieren. die Objekte werden 1/a Ball (von vielen, die auf dem Bildschirm sein können) 2/die Tabelle (die hat einige Physic Attribute) und 3/Taschen (was nur am Ende einiger unsichtbaren Rechtecken) für die Bearbeitung des ChaosUmgang mit Kollisionsereignissen für mehrere Objekte mit Physik
von 2 Wochen zu sein ich bin gekommen, zu diesem Schluss
- Ball trifft andere Kugel
- Ball-Tabelle schlägt aus aus
- Tabelle trifft nicht ab Tasche (statischer Körper)
- Tasche schlägt aus NICHT Ball (statischer Körper)
- Ball geht weg Tasche
eine Probe der Codestruktur den 100 Balls schaffen
balls = {}
local i = 1
function createBalls()
for i = 1,100,1 do -- create the 100 and hide them?
ball = display.newImage("ball.png")
ball.isVisible = false
ball.id = tostring("ball " ..i)
balls[#ball+1] = ball
sceneGroup:insert(ball[#ball])
end
end
erklären 6 Taschen (die ID wie die Flagge für Kollisionsbehandlung unter Verwendung)
local Pocket1 = display.newRect(screenWidth * .28, screenHeight * .5, 15, 18) --Left Pocket 60pts
physics.addBody(Pocket1, "kinematic", {isSensor = true})
Pocket1:addEventListener("collision", Pocket1) Pocket1.isVisible = true Pocket1.alpha = 0.5
Pocket1.id ="Left Pocket 60pts"
local Pocket2 = display.newRect(screenWidth * .3945, screenHeight * .556, 15, 18) -- Left Pocket 30pts
physics.addBody(Pocket2, "kinematic", {isSensor = true})
Pocket2:addEventListener("collision", Pocket2) Pocket2.isVisible = false
Pocket2.id ="Left Pocket 30pts"
local Pocket3 = display.newRect(screenWidth * .512, screenHeight * .490, 15, 18) -- Center Pocket 10 pts
physics.addBody(Pocket3, "kinematic", {isSensor = true})
Pocket3:addEventListener("collision", Pocket3) Pocket3.isVisible = false
Pocket3.id ="Center Pocket 10pts"
local Pocket4 = display.newRect(screenWidth * .613, screenHeight * .556, 15, 18) -- Right Pocket 30 pts
physics.addBody(Pocket4, "kinematic", {isSensor = true})
Pocket4:addEventListener("collision", Pocket4) Pocket4.isVisible = false
Pocket4.id ="Right Pocket 30pts"
local Pocket5 = display.newRect(screenWidth * .736, screenHeight * .5, 15, 18) -- Far Right Pocket 60pts
physics.addBody(Pocket5, "kinematic", {isSensor = true})
Pocket5:addEventListener("collision", Pocket5) Pocket5.isVisible = false
Pocket5.id ="Right Pocket 60pts"
local Pocket6 = display.newRect(screenWidth * .512, screenHeight * .638, 50, 10) -- Kill-z Pocketphysics.addBody(Pocket6, "kinematic", {isSensor = true})
Pocket6:addEventListener("collision", Pocket6) Pocket6.isVisible = false
Pocket6.id ="Kill Pocket"
Mein Problem, Kollisionserkennung auf der letzten Kugel funktioniert nur, die geladen wurde,
(falls jemand für das fragt loader-Funktion)
--handle loader
function shootBall()
createBalls() --obviously this will now spawn 100 balls
if ballLoaded == true then
r1 = -687.5 r2 = -668
r3 = 595 r4 = 645
ball[k].x = screenWidth * .378 ball[k].y = screenHeight * .638
ball[k]:scale(0.16,0.16)
ball[k].isVisible = true
physics.addBody(ball[k], "dynamic", {radius = 5.5, density=15.0, friction=0.8, bounce=0.0 })
ball[k]:setLinearVelocity(math.random(r1,r2), math.random(r3,r4))
--and here it will have done nothing productive other than fill the screen with balls
end
ein Rollback bearbeiten war ursprünglich, was heißen würde, aber wie Sie sehen können, ist nicht gut auf allen organisiert, angesichts der mehr die letzte Code ist ein Chaos ..
local i = 1
local balls = {}
local function spawnBall()
if i > 0 or i < 100 then
balls[i] = display.newImage("ball.png")
balls[i].id = "ball "..i
balls[i].x = screenWidth * .378
balls[i].y = screenHeight * .638
balls[i]:scale(0.16,0.16)
balls[i].isVisible = true
physics.addBody(balls[i], "dynamic", {radius = 5.5, density=15.0, friction=0.8, bounce=0.0 })
balls[i]:setLinearVelocity(math.random(-687.5,-668), math.random(595,645))
sceneGroup:insert(balls[i])
print(balls[i].id.. " shot")
i = i + 1
end
end`
Es gibt einige seltsame (und riechende) Dinge in Ihrem Code. Die createBall-Funktion ist definitiv falsch. Bist du sicher, dass du weißt, was du hier machst? Sie erstellen einen Ball-Tisch für jede Schleife, speichern einige Dinge dort und speichern dann einen Verweis auf diese Tabelle in der Tabelle ** selbst **, aber am Anfang ('#ball + 1' wird bei einem' k' größer als 1). In Ihrer Ladefunktion, was ist k? Wenn es eine globale Variable ist, tun Sie dies nicht. Vertrau mir, du willst das nicht so machen. Darüber hinaus sollten Sie vorsichtig mit dem Einzug sein, es hilft auch, Fehler zu erkennen. – pschulz