Page 1 of 2

[Help] making enemies

Posted: Sun Feb 01, 2015 7:19 pm
by pactace
I am making a 2D plaformer and I dont really know how to make an enemy and import sprites and such can anyone help me

Re: Im a noob somebody help me

Posted: Sun Feb 01, 2015 8:21 pm
by Bhane
Are you working from another project?
Post your .love so we can see some context.

Re: Im a noob somebody help me

Posted: Sun Feb 01, 2015 8:40 pm
by Duster
Read the wiki, check tutorials on youtube, etc.
Love is well documented so if you don't know how to use something, chances are you can find the answer on the wiki

Re: Im a noob somebody help me

Posted: Mon Feb 02, 2015 4:15 am
by pactace

Code: Select all

local AdvTiledLoader = require( "AdvTiledLoader.Loader" )
require("camera")

function love.load()
	love.graphics.setBackgroundColor( 9, 166, 193 )
	AdvTiledLoader.path = "maps/"
	map = AdvTiledLoader.load("Ians maps.tmx")
	map:setDrawRange(0, 0, map.width * map.tileWidth, map.height * map.tileHeight)
	
	camera:setBounds(0, 0, map.width * map.tileWidth - love.graphics.getWidth(), map.height * map.tileHeight - love.graphics.getHeight() )

	world = 	{
				gravity = 1536,
				ground = 512,
				}
				
	player = 	{
				x = 256,
				y = 256,
				x_vel = 0,
				y_vel = 0,
				jump_vel = -1024,
				speed = 512,
				flySpeed = 700,
				state = "",
				h = 32,
				w = 32,
				standing = false,
				}
	function player:jump()
		if self.standing then
			self.y_vel = self.jump_vel
			self.standing = false
		end
	end
	
	function player:right()
		self.x_vel = self.speed
	end
	
	function player:left()
		self.x_vel = -1 * (self.speed)
	end
	
	function player:stop()
		self.x_vel = 0
	end
	
	function player:collide(event)
		if event == "floor" then
			self.y_vel = 0
			self.standing = true
		end
		if event == "cieling" then
			self.y_vel = 0
		end
	end
	
	function player:update(dt)
		local halfX = self.w / 2
		local halfY = self.h / 2
		
		self.y_vel = self.y_vel + (world.gravity * dt)
		
		self.x_vel = math.clamp(self.x_vel, -self.speed, self.speed)
		self.y_vel = math.clamp(self.y_vel, -self.flySpeed, self.flySpeed)
		
		local nextY = self.y + (self.y_vel*dt)
		if self.y_vel < 0 then
			if not (self:isColliding(map, self.x - halfX, nextY - halfY))
				and not (self:isColliding(map, self.x + halfX - 1, nextY - halfY)) then
				self.y = nextY
				self.standing = false
			else
				self.y = nextY + map.tileHeight - ((nextY - halfY) % map.tileHeight)
				self:collide("cieling")
			end
		end
		if self.y_vel > 0 then
			if not (self:isColliding(map, self.x-halfX, nextY + halfY))
				and not(self:isColliding(map, self.x + halfX - 1, nextY + halfY)) then
					self.y = nextY
					self.standing = false
			else
				self.y = nextY - ((nextY + halfY) % map.tileHeight)
				self:collide("floor")
			end
		end
		
		local nextX = self.x + (self.x_vel * dt)
		if self.x_vel > 0 then
			if not(self:isColliding(map, nextX + halfX, self.y - halfY))
				and not(self:isColliding(map, nextX + halfX, self.y + halfY - 1)) then
				self.x = nextX
			else
				self.x = nextX - ((nextX + halfX) % map.tileWidth)
			end
		elseif self.x_vel < 0 then
			if not(self:isColliding(map, nextX - halfX, self.y - halfY))
				and not(self:isColliding(map, nextX - halfX, self.y + halfY - 1)) then
				self.x = nextX
			else
				self.x = nextX + map.tileWidth - ((nextX - halfX) % map.tileWidth)
			end
		end
		
		self.state = self:getState()
	end
	
	function player:isColliding(map, x, y)
		local layer = map.tl["Solid"]
		local tileX, tileY = math.floor(x / map.tileWidth), math.floor(y / map.tileHeight)
		local tile = layer.tileData(tileX, tileY)
		return not(tile == nil)
	end
	
	function player:getState()
		local tempState = ""
		if self.standing then
			if self.x_vel > 0 then
				tempState = "right"
			elseif self.x_vel < 0 then
				tempState = "left"
			else
				tampState = "stand"
			end
		end
		if self.y_vel > 0 then
			tempState = "fall"
		elseif self.y_vel < 0 then
			tempState = "jump"
		end
		return tempState
	end
	xCloud = 0
	
end

function love.draw()
	camera:set()
	
	
	love.graphics.setColor( 0, 0, 0 )
	love.graphics.rectangle( "line", player.x - player.w/2, player.y - player.h/2, player.w, player.h)
	
	love.graphics.setColor( 255, 255, 255 )
	love.graphics.rectangle( "fill", xCloud - 256, 126, 256, 64 )
	
	map:draw()
		
camera:unset()
end

function love.update(dt)
	xCloud = xCloud + 32*dt
	if xCloud >= (800 + 25 ) then
		xCloud = 0
	end

	if dt > 0.05 then
		dt = 0.05
	end
	if love.keyboard.isDown("d") then
		player:right()
	end
	if love.keyboard.isDown("a") then
		player:left()
	end
	if love.keyboard.isDown(" ") then
		player:jump()
	end
	
	player:update(dt)
	
	camera:setPosition( player.x - (love.graphics.getWidth()/2), player.y - (love.graphics.getHeight()/2))
end

function love.keyreleased(key)
	if (key == "a") or (key == "d") then
		player.x_vel = 0
	end
	
end

Re: Im a noob somebody help me

Posted: Mon Feb 02, 2015 4:15 am
by pactace
sorry for the long code didnt know what to post]

Re: Im a noob somebody help me

Posted: Mon Feb 02, 2015 4:46 am
by Bhane
So can you be more precise about what you want?
ex, What kind of enemy? What behaviours would you like it to have? How do you want to use sprites?

Re: Im a noob somebody help me

Posted: Mon Feb 02, 2015 10:00 am
by Jasoco
pactace wrote:sorry for the long code didnt know what to post]
Can you please use the CODE tags?

Re: Im a noob somebody help me

Posted: Mon Feb 02, 2015 12:16 pm
by Doctory
for the love of god use descriptive titles
"im a noob somebody help me" does not help anyone

Re: Im a noob somebody help me

Posted: Tue Feb 03, 2015 10:33 pm
by pactace
Sorry about the name I'm just looking how to make an enemy that attacks you when you get close I already got all the sprites

Re: Im a noob somebody help me

Posted: Tue Feb 03, 2015 11:32 pm
by pactace
Also I'm unfamiliar with code tags