-1
我试图做一个简单的闪避游戏,其中包括从屏幕顶部落下的拾音器:“wpLaser”如何从屏幕中删除所有衍生物体?
当玩家触摸拾音器时,我想要所有衍生的炮弹(“默认” )上要移除的屏幕(这是可能的)
的问题是,我想弹继续产卵检拾器拾取
下面是一些供参考的代码之后:
local composer = require("composer")
local widget = require("widget")
local scene = composer.newScene()
local physics = require("physics") -- Using physics for collision detections
physics.start()
physics.setGravity(0, 0)
-- Object group for removal
local objectGroup = display.newGroup()
-- Set Variables
_W = display.contentWidth; -- Get the width of the screen
_H = display.contentHeight; -- Get the height of the screen
function scene:create(event)
local sceneGroup = self.view
这里有我想要的弹丸当玩家接触拾取中删除:
-- Projectiles
local numberDefault = 1 --local variable; amount can be changed
local function clearDefault(thisDefault)
display.remove(thisDefault) ; thisDefault = nil
end
local function spawnDefault()
for i=1,numberDefault do
local default = display.newImage("projectiles/default.png")
default.x = math.random(0, _W)
default.y = -100
default.myName = "default"
default.class = "default"
physics.addBody(default, "dynamic", { density = 0, friction = 0, bounce = 0, isSensor = true, radius = 30 })
transition.to(default, { x = math.random(0, _W), y = 1200, time = 4000, onComplete = clearDefault })
objectGroup:insert(default)
end
end
timerDefault = timer.performWithDelay(250, spawnDefault, 0) -- spawn 1 every 250 units
这是拾取本身:
-- Laser power-up
local numberWpLaser = 1 --local variable; amount can be changed
local function clearWpLaser(thisWpLaser)
display.remove(thisWpLaser) ; thisWpLaser = nil
end
local function spawnWpLaser()
for i=1,numberWpLaser do
local wpLaser = display.newImage("images/wpLaser.png")
wpLaser.x = math.random(0, _W)
wpLaser.y = -100
wpLaser.myName = "wpLaser"
physics.addBody(wpLaser, "dynamic", { density = 0, friction = 0, bounce = 0, isSensor = true, radius = 40 })
transition.to(wpLaser, { x = wpLaser.x, y = 1200, time = 5000, onComplete = clearWpLaser })
objectGroup:insert(wpLaser)
end
end
timerWpLaser = timer.performWithDelay(5000, spawnWpLaser, 0) -- spawn 1 every 5000 units
-- Collision detection events
local function onCollision(event)
if event.phase == "began" then -- event is only called when it begins (not when it ends)
if (event.object1.myName == "player" and event.object2.myName == "default") then
print("You Died")
这是我遇到的困难。当玩家触摸拾音器时,我希望屏幕上所有产生的对象都被删除,但继续产生。 目前,抛射物正在被移除,但我无法让他们再次开始产卵。
elseif (event.object1.myName == "player" and event.object2.myName == "wpLaser") then
event.object2:removeSelf()
transition.cancel(default)
timer.pause(timerDefault)
timer.pause(timerWpLaser)
local pickupSound = audio.loadSound("audio/pickup.mp3")
local pickupChannel = audio.play(pickupSound)
local blank = display.newRect(_W/2, _H/2, _W, _H)
blank.myName = "blank"
transition.to(blank, { time = 800, alpha = 0, onComplete = clearblank })
objectGroup:removeSelf()
objectGroup = nil
print("Pickup")
end
end
end
Runtime:addEventListener("collision", onCollision)
end
对不起倾销所有的代码在这里,如果你需要任何东西,请询问任何确认。 非常感谢帮助
那么,你是否说删除objectGroup是一个错误?有没有替代方法可以删除当前屏幕上的对象? – Usagi
你有一张桌子上放着一个盒子。它包含玩具。你想从房间里取出玩具,但你会想在以后带更多的玩具。你从盒子里拿出玩具吗?或者你把箱子拿出房间了吗?如果你把箱子拿出房间,你会把新玩具放在哪里? – zeromus
我明白你在说什么 - 我不应该删除objectGroup。但是,你知道另一种方法去除抛射物吗? 对不起,我在编码方面不是很有经验。 – Usagi