Page 1 of 2
Bump error "item object must be added..."
Posted: Wed Nov 30, 2022 4:12 pm
by fridays18
Im using bump for my project and im trying to make a system where when it dies it removes itself from the world, the only problem is every time I try I get this error-
- Screen Shot 2022-11-30 at 11.08.24 AM.png (220.2 KiB) Viewed 1972 times
From a forum post a little while ago ill link below this says, I must keep the list out of the function to remove it, but I have no clue of how to do that when dealing with class's since im world:add(self) and world:remove(self)
Link :
viewtopic.php?f=4&t=86556&p=226785&hili ... ed#p226785
Here is the code incase it can help
Bullet.lua-
Code: Select all
Bullet = Object:extend()
function Bullet:new(x, y)
self.r = 1
self.x = x
self.y = y
self.speed = 700
self.w = 10
self.h = 10
self.path = 0
self.vx = 0
self.vy = 0
self.dead = false
if player.d == 4 then
self.path = 4
elseif player.d == 1 then
self.path = 1
elseif player.d == 2 then
self.path = 2
elseif player.d == 3 then
self.path = 3
end
world:add(self, self.x, self.y, self.w, self.h)
end
function Bullet:update(dt)
self.vx = 0
self.vy = 0
if self.x > screenx or self.x < 0 or self.y > screeny or self.y < 0 then
self.dead = true
end
if self.path == 4 then
self.vy = self.vy + self.speed * dt
elseif self.path == 1 then
self.vx = self.vx - self.speed * dt
elseif self.path == 2 then
self.vx = self.vx + self.speed * dt
elseif self.path == 3 then
self.vy = self.vy - self.speed * dt
end
self.x, self.y = world:move(self, self.x+self.vx, self.y+self.vy)
local targetX, targetY = self.x+self.vx*dt, self.y+self.vy*dt
local newX, newY = world:move(self, targetX, targetY)
if newX == targetX and newY == targetY then -- no collision
self.x, self.y = newX, newY
else -- collision
self.dead = true
end
if self.dead == true then
world:remove(self)
end
end
function Bullet:draw()
if self.dead == true then
love.graphics.circle("line",self.x,self.y,29)
end
--love.graphics.circle("fill", self.x, self.y,self.r)
love.graphics.rectangle("line",self.x,self.y,self.w,self.h)
end
Any help would be much appreciated!
Re: Bump error "item object must be added..."
Posted: Wed Nov 30, 2022 5:29 pm
by darkfrei
Don't forget to remove it from the list of bullets.
How you call the function Bullet:update(dt)?
The removing must be like
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! No sequence changing
local bullet = Bullets[i]
if bullet.dead then
table.remove (Bullets, i)
end
end
OR
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! But it changes the sequence
local bullet = Bullets[i]
if bullet.dead then
-- overwrite current element with the last element and remove last element:
Bullets[i], Bullets[#Bullets] = Bullets[#Bullets] , nil
end
end
Re: Bump error "item object must be added..."
Posted: Wed Nov 30, 2022 10:27 pm
by fridays18
darkfrei wrote: ↑Wed Nov 30, 2022 5:29 pm
Don't forget to remove it from the list of bullets.
How you call the function Bullet:update(dt)?
The removing must be like
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! No sequence changing
local bullet = Bullets[i]
if bullet.dead then
table.remove (Bullets, i)
end
end
OR
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! But it changes the sequence
local bullet = Bullets[i]
if bullet.dead then
-- overwrite current element with the last element and remove last element:
Bullets[i], Bullets[#Bullets] = Bullets[#Bullets] , nil
end
end
I know how to remove it from the list my issue is just removing it from the bump list more than the normal one
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 11:59 am
by darkfrei
fridays18 wrote: ↑Wed Nov 30, 2022 10:27 pm
darkfrei wrote: ↑Wed Nov 30, 2022 5:29 pm
Don't forget to remove it from the list of bullets.
How you call the function Bullet:update(dt)?
The removing must be like
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! No sequence changing
local bullet = Bullets[i]
if bullet.dead then
table.remove (Bullets, i)
end
end
OR
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! But it changes the sequence
local bullet = Bullets[i]
if bullet.dead then
-- overwrite current element with the last element and remove last element:
Bullets[i], Bullets[#Bullets] = Bullets[#Bullets] , nil
end
end
I know how to remove it from the list my issue is just removing it from the bump list more than the normal one
The error message looks like that you have successfully removed it from world and
on the next update it's not here anymore, but called.
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 12:04 pm
by fridays18
darkfrei wrote: ↑Thu Dec 01, 2022 11:59 am
fridays18 wrote: ↑Wed Nov 30, 2022 10:27 pm
darkfrei wrote: ↑Wed Nov 30, 2022 5:29 pm
Don't forget to remove it from the list of bullets.
How you call the function Bullet:update(dt)?
The removing must be like
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! No sequence changing
local bullet = Bullets[i]
if bullet.dead then
table.remove (Bullets, i)
end
end
OR
Code: Select all
for i = #Bullets, 1, -1 do -- backwards! But it changes the sequence
local bullet = Bullets[i]
if bullet.dead then
-- overwrite current element with the last element and remove last element:
Bullets[i], Bullets[#Bullets] = Bullets[#Bullets] , nil
end
end
I know how to remove it from the list my issue is just removing it from the bump list more than the normal one
The error message looks like that you have successfully removed it from world and
on the next update it's not here anymore, but called.
Hm, in my update code it removes it from the world than the list so I dont see how it would be an issue since its all back to back
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 12:09 pm
by darkfrei
From line 47 of bullet.lua will be called the "move" function from bump.lua, but the bullet is not in the world.
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 12:17 pm
by fridays18
Quick update I fixed the problem, I was using a system to set to to dead if it collided then later on I would call it and say is self.dead == true than remove, what fixed it is just directly implementing it in the initial system
Code: Select all
if self.dead == false then
self.x, self.y = world:move(self, self.x+self.vx, self.y+self.vy)
local targetX, targetY = self.x+self.vx*dt, self.y+self.vy*dt
local newX, newY = world:move(self, targetX, targetY)
if newX == targetX and newY == targetY then -- no collision
self.x, self.y = newX, newY
else -- collision
self.dead = true
world:remove(self)
end
end
Thanks for the help!
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 12:57 pm
by darkfrei
Why you call update bullet by dead bullet?
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 1:13 pm
by fridays18
darkfrei wrote: ↑Thu Dec 01, 2022 12:57 pm
Why you call update bullet by dead bullet?
what do you mean?
Re: Bump error "item object must be added..."
Posted: Thu Dec 01, 2022 1:22 pm
by fridays18
Now my enemy script is returning the same error
these are very confusing times
Code: Select all
--Makes enemy a class
Enemy = Object.extend(Object)
--calling enemy() plays this function
function Enemy.new(self,x,y)
self.x = x
self.y = y
self.width = 10
self.height = 10
self.speed = math.random(50,70)
self.health = math.random(1,50)
self.dead = false
self.check = false
self.c1 = math.random(1,255)
self.c2 = math.random(1,255)
self.c3 = math.random(1,255)
world:add(self, self.x, self.y, self.width, self.height)
self.vx = 0
self.vy = 0
self.range = false
end
function Enemy.update(self, dt)
--here
self.vx = 0
self.vy = 0
self.range = CheckCollision(self.x - 20,self.y - 20 ,self.width + 40,self.height + 40,player.x,player.y,player.w,player.h)
if self.range == true then
if self.x < player.x + 10 then
self.vx = self.vx + self.speed * dt
elseif self.x > player.x + 10 then
self.vx = self.vx - self.speed * dt
end
if self.y < player.y + 10 then
self.vy = self.vy + self.speed * dt
elseif self.y > player.y + 10 then
self.vy = self.vy - self.speed * dt
end
end
if self.dead == false then
self.x, self.y = world:move(self, self.x+self.vx, self.y+self.vy)
else
world:remove(self)
end
end
function Enemy.draw(self)
love.graphics.push("all")
love.graphics.setColor(self.c1,self.c2,self.c3,50)
love.graphics.rectangle("fill", self.x, self.y, self.width, self.height)
love.graphics.setColor(1, 1, 1)
love.graphics.pop()
love.graphics.rectangle("line",self.x - 20,self.y - 20 ,self.width + 40,self.height + 40)
end