2016-04-25 28 views
-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 

对不起倾销所有的代码在这里,如果你需要任何东西,请询问任何确认。 非常感谢帮助

回答

1

每个“250单位”你spawnDefault其中objectGroup添加对象。在你的“玩家触摸拾取器”的处理程序中,你将objectGroup设置为零。那么你告诉我,spawnDefault将在下次运行时添加对象在哪里?

+0

那么,你是否说删除objectGroup是一个错误?有没有替代方法可以删除当前屏幕上的对象? – Usagi

+2

你有一张桌子上放着一个盒子。它包含玩具。你想从房间里取出玩具,但你会想在以后带更多的玩具。你从盒子里拿出玩具吗?或者你把箱子拿出房间了吗?如果你把箱子拿出房间,你会把新玩具放在哪里? – zeromus

+0

我明白你在说什么 - 我不应该删除objectGroup。但是,你知道另一种方法去除抛射物吗? 对不起,我在编码方面不是很有经验。 – Usagi