collision issues

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
russ_e
Prole
Posts: 11
Joined: Wed Sep 05, 2012 12:15 pm

collision issues

Post by russ_e »

Right, so, i've grabbed the collision callbacks tutorial (https://love2d.org/wiki/Tutorial:Physic ... nCallbacks) and i've been using the entity system goature explains in his tutorials (http://www.youtube.com/playlist?list=PL924F20B05A624D91)

Now, i admit i've probably somewhat fudged things a bit (using the setPos function to fire arguements into the entities i create probably isnt the slickest solution, but i was in a bad mood).

Problem i'm having is, after a while, my enemy entities seem to stop reacting to collision hits. The callback function seems to be recieving them though... I'm obviously doing something stupid, so i figured i'd ask if there are any particular tutorials on this kind of stuff? Or if there's someone out there with the time and patience to give me a hand, i wouldnt complain :)

Here's how I'm trying to grab the collisions from the world callbacks...

Code: Select all

function beginContact(a, b, coll)
    x,y = coll:getNormal()
	
	for i, ent in pairs(ents.objects) do
		if ent.fixture:getUserData() == a:getUserData() then
			ent.colliding = b:getUserData()		
					
		elseif ent.fixture:getUserData() == b:getUserData() then
			ent.colliding = a:getUserData()			
		end
	end
end
and in the enemy entity...

Code: Select all

function ent:update_collision()
	
	for i, ent in pairs(ents.objects) do
		if ent.fixture:getUserData() == self.colliding then
			if ent.colliding then
				print("-------------------------------------------------------------------------------")
				print (ent.fixture:getUserData(), ent.colliding)
			end
			
			if ent.type == "fireball" then  -- was i hit by a fireball?
				self:damage (ent.dam)
			end
			
			if ent.type == "fireball_exp" then  -- was i hit my a fireball explosion?
				self:damage (ent.dam)
				
				if ent.cast_time > 0.5 then
					if self.health > 0 then
						local hit_force = 100000 * ent.cast_time
						
						if ent.cast_time == 1 then
							hit_force = 150000
						end
						
						repel_object(ent, self,  hit_force)
						self.exp_hit = true
					end
				end
			end
			
			if self.health > 0 then
				if ent.type == "icenova" then  --was i frozen?
					self.frozen = true
				end
			end			
		end
	end
end
russ_e
Prole
Posts: 11
Joined: Wed Sep 05, 2012 12:15 pm

Re: collision issues

Post by russ_e »

uploading the .love file might help
Attachments
game.love
(223.91 KiB) Downloaded 105 times
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Semrush [Bot] and 6 guests