removing random objects[solved]

I have 20 apples on a tree that are attached to a table… One apple that is attached to a onEnterFrame(event) Which makes it fall and draggable.
I have a tree that animates a shake…

Here is the code
[lua]local loqsprite = require(‘loq_sprite’)
display.setStatusBar( display.HiddenStatusBar ) – HIDE STATUS BAR

local screenW = display.contentWidth
local screenH = display.contentHeight

local goalsAchieved = 0
local rand = math.random

local i
local appleCount = 0
local apples = {}
local apple
local counter = 0
local applesOnScreen = 0
local maxApples = 20
local _apple = {}
local speed = 4

local appleIcons = {}
local t1 = {
{ x=490, y=380 },
{ x=400, y=380 },
{ x=550, y=350 },
{ x=450, y=250 },
{ x=540, y=130 },
{ x=530, y=290 },
{ x=500, y=200 },
{ x=550, y=230 },
{ x=600, y=280 },
{ x=500, y=250 },

{ x=500, y=200 },
{ x=650, y=390 },
{ x=610, y=420 },
{ x=565, y=425 },
{ x=600, y=200 },
{ x=425, y=290 },
{ x=470, y=300 },
{ x=540, y=180 },
{ x=610, y=350 },
{ x=455, y=342 },

}

local BG = display.newImageRect(“background.png”, 1024, 768)
BG.x = screenW/2; BG.y = screenH/2

local tfactory = loqsprite.newFactory(“aniTree”)
local theTree = tfactory:newSpriteGroup()
theTree.x = screenW/2; theTree.y = 300

local basket = display.newImageRect(“basket.png”, 224, 165)
basket.x = 850; basket.y = 625

local apple = display.newImageRect(“apple.png”, 39, 44)
apple.x = screenW/4; apple.y = screenH/4

local goalCount = display.newText(string.format("%02d", 0), 0, 0, native.systemFontBold, 40)
goalCount:setTextColor(255,255,255,255)
goalCount.x = 850; goalCount.y = 600
function spawnApple()

local theApple = _apple.new()
if theApple == nil then return end

apples[theApple.ID] = theApple

applesOnScreen = 1

print(“appless on screen”, applesOnScreen)
end

local function isGoalReached(event)
goalReached = false
if event.phase == “ended” then
goalReached = true;
end
end

function onEnterFrame(event)

if apple.isFocus==true then return end

if apple.y < 500 then
apple.y = apple.y+speed

end
end

Runtime:addEventListener(“enterFrame”,onEnterFrame)

for i = 1,#t1 do
apples[i] = display.newImageRect(“apple.png”, 39, 44)
apples[i].x = t1[i].x; apples[i].y = t1[i].y
end

local function shakeTree(event)
theTree:play(“treeShake shake”)

end

theTree:addEventListener(“tap”, shakeTree)

–[[
local function drawAppleImg(num)
for i = 1, 10 do
if i <= num then
apples[i].isVisible = true
else
apples[i].isVisible = false
end
end
end
]]
local function dragApple(event)
local phase = event.phase
local x = event.x
local y = event.y
local target = event.target

if “began” == phase then
display.currentStage:setFocus(apple)
target.x0 = x
target.y0 = y
target.isFocus = true
elseif “moved” == phase and target.isFocus==true then
target.x = target.x + (x-target.x0)
target.y = target.y + (y-target.y0)

target.x0 = x
target.y0 = y
elseif “ended” == phase then
display.currentStage:setFocus(nil)
apple.isFocus = false
target.x0 = nil
target.y0 = nil
end
end
apple:addEventListener(“touch”, dragApple)
basket:addEventListener(“touch”, isGoalReached)[/lua]

Can anybody help me remove a random number of apples when the tree is touched? [import]uid: 51459 topic_id: 16657 reply_id: 316657[/import]

you know Jake, this might be a case of where you want to mix physics with your non-physics code. Let the physics manage the falling apples. Its the “Newtonian” thing to do.

Instead of writing your own drop code, (which is a good exercise by the way…) this is where physics is a perfect use. Just make your apples physics bodies, put in a floor for the apples to fall too and let them bounce around, fall at the right speeds etc.

I’ve only used physics a little, so I’m not going to be a good source to help you. [import]uid: 19626 topic_id: 16657 reply_id: 62224[/import]

I don’t necessarily have to make them fall, just remove a random amount of them when the tree is clicked. [import]uid: 51459 topic_id: 16657 reply_id: 62229[/import]

Well to select a random apple and just remove it, I’d do this:

appleToRemove = random(#apples)  
  
apples[appleToRemove]:removeSelf()  
apples[appleToRemove] = nil  
table.remove(apples, appleToRemove)  

or if you want to have it drop without physics, using a transition.to:

local function removeApple(target)  
 index - target.index  
 apples[index]:removeSelf()  
 apples[index] = nil  
 table.remove(apples, index)  
end  
appleToRemove = random(#apples)  
apples[appleToRemove].index = appleToRemove  
transition.to(apples[appleToRemove], { y = display.contentHeight + 30, onComplete=removeApple })  
  

In the transition.to the “+ 30” is the height of your apple graphics. So if your apples are 64 pixels high, change it to + 64. If your apples are of variable size, then get the contentHeight of that specific apple. Now this will cause your apple to fall off the bottom of the screen and once its off screen, it will be removed.
[import]uid: 19626 topic_id: 16657 reply_id: 62232[/import]

Thanks Rob!! This is a great chunk of code to work with! [import]uid: 51459 topic_id: 16657 reply_id: 62233[/import]

if you are using a transition.to option - set the alpha value 0
its still there but invisible, so to speak.

get the X,Y values of that APPLE and then

create a new APPLE object with a “dynamic” body. and it drops according to gravity.
that is if you set you turned on physics.

of course you could the set your original APPE object = nil to remove it all together.

[import]uid: 11094 topic_id: 16657 reply_id: 62797[/import]

thanks troynall! [import]uid: 51459 topic_id: 16657 reply_id: 62800[/import]