Hard to explain, but I'll try nevertheless...
Now, I used the gridlocked player tutorial, and changed it a little bit, but what I'm trying to do, is make the walls (smoothly) shake/move about (like, give it an effect that it is in space), but I tried everything, and nothing worked. Check out the attachment.
Thanks for help, if you still don't get it, tell me.
Shaking love.graphics.drawn objects
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
-
- Prole
- Posts: 17
- Joined: Tue Apr 15, 2014 11:32 am
Shaking love.graphics.drawn objects
- Attachments
-
- SpaceBlox.love
- (2.88 MiB) Downloaded 108 times
-
- Prole
- Posts: 17
- Joined: Tue Apr 15, 2014 11:32 am
Re: Shaking love.graphics.drawn objects
Anyone?
Or is this literally impossible?
Or is this literally impossible?
- Jasoco
- Inner party member
- Posts: 3726
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Shaking love.graphics.drawn objects
If you make each wall tile a separate object with its own properties, you could create them all with random shake values and in their update callbacks handle the movement.
If I did it, this is my method:
You should give a thread more than just 12 hours before bumping. It's frowned upon to bump too soon. Threads don't fall off the first page easily on this forum. Give it a few days before bumping.
If I did it, this is my method:
Code: Select all
blockObject = {}
function blockObject:init(v)
local _i = {}
setmetatable(_i, {__index = self})
_i:reset(v)
return _i
end
function blockObject:reset(v)
local v = v or {} -- Prevent potential future "table doesn't exist" errors
self.x = v.x or 0
self.y = v.y or 0
self.shakeOffsetX = v.shakeOffsetX or 0
self.shakeOffsetY = v.shakeOffsetY or 0
self.shakeSpeed = v.shakeSpeed or 0
self.offsetAmountX = v.offsetAmountX or 4 -- How far offset do you want the tile to move
self.offsetAmountY = v.offsetAmountY or 4 -- from its centered point?
self.drawX = v.drawX or self.x -- Set up the default position in case shake values are 0
self.drawY = v.drawY or self.y
end
function blockObject:update(dt)
if self.shakeSpeed > 0 then
self.shakeOffsetX = self.shakeOffsetX + dt * (self.shakeSpeed * self.offsetAmountX)
self.shakeOffsetY = self.shakeOffsetY + dt * (self.shakeSpeed * self.offsetAmountY)
self.drawX = self.x + math.sin(self.shakeOffsetX)
self.drawY = self.y + math.sin(self.shakeOffsetY)
end
end
function blockObject:draw()
-- Handle drawing the block here
love.graphics.draw(my image, self.drawX, self.drawY, ...)
end
Code: Select all
-- To create the blocks
block = {}
for y=1, #map do
block[x] = {}
for x=1, #map[y] do
if map[y][x] == 1 then
block[x][y] = blockObject {
x = x * 32,
y = y * 32,
shakeOffsetX = math.random() * math.pi,
shakeOffsetY = math.random() * math.pi,
shakeSpeed = whateverYouWant,
...
}
end
end
end
Code: Select all
-- In Update
for y=1, #map do
for x=1, #map[y] do
if map[y][x] == 1 then
block[x][y]:update(dt)
end
end
end
Code: Select all
-- In Draw
for y=1, #map do
for x=1, #map[y] do
if map[y][x] == 1 then
block[x][y]:draw()
end
end
end
-
- Prole
- Posts: 17
- Joined: Tue Apr 15, 2014 11:32 am
Re: Shaking love.graphics.drawn objects
Jasoco wrote:If you make each wall tile a separate object with its own properties, you could create them all with random shake values and in their update callbacks handle the movement.
If I did it, this is my method:Code: Select all
blockObject = {} function blockObject:init(v) local _i = {} setmetatable(_i, {__index = self}) _i:reset(v) return _i end function blockObject:reset(v) local v = v or {} -- Prevent potential future "table doesn't exist" errors self.x = v.x or 0 self.y = v.y or 0 self.shakeOffsetX = v.shakeOffsetX or 0 self.shakeOffsetY = v.shakeOffsetY or 0 self.shakeSpeed = v.shakeSpeed or 0 self.offsetAmountX = v.offsetAmountX or 4 -- How far offset do you want the tile to move self.offsetAmountY = v.offsetAmountY or 4 -- from its centered point? self.drawX = v.drawX or self.x -- Set up the default position in case shake values are 0 self.drawY = v.drawY or self.y end function blockObject:update(dt) if self.shakeSpeed > 0 then self.shakeOffsetX = self.shakeOffsetX + dt * (self.shakeSpeed * self.offsetAmountX) self.shakeOffsetY = self.shakeOffsetY + dt * (self.shakeSpeed * self.offsetAmountY) self.drawX = self.x + math.sin(self.shakeOffsetX) self.drawY = self.y + math.sin(self.shakeOffsetY) end end function blockObject:draw() -- Handle drawing the block here love.graphics.draw(my image, self.drawX, self.drawY, ...) end
Code: Select all
-- To create the blocks block = {} for y=1, #map do block[x] = {} for x=1, #map[y] do if map[y][x] == 1 then block[x][y] = blockObject { x = x * 32, y = y * 32, shakeOffsetX = math.random() * math.pi, shakeOffsetY = math.random() * math.pi, shakeSpeed = whateverYouWant, ... } end end end
Code: Select all
-- In Update for y=1, #map do for x=1, #map[y] do if map[y][x] == 1 then block[x][y]:update(dt) end end end
You should give a thread more than just 12 hours before bumping. It's frowned upon to bump too soon. Threads don't fall off the first page easily on this forum. Give it a few days before bumping.Code: Select all
-- In Draw for y=1, #map do for x=1, #map[y] do if map[y][x] == 1 then block[x][y]:draw() end end end
Thanks, I'll try this out.
Actually, I did give it more than 12 hours, 7pm to 7am = 12 hours.
-
- Prole
- Posts: 17
- Joined: Tue Apr 15, 2014 11:32 am
Re: Shaking love.graphics.drawn objects
I have no idea where to put the top 2.Jasoco wrote:If you make each wall tile a separate object with its own properties, you could create them all with random shake values and in their update callbacks handle the movement.
If I did it, this is my method:Code: Select all
blockObject = {} function blockObject:init(v) local _i = {} setmetatable(_i, {__index = self}) _i:reset(v) return _i end function blockObject:reset(v) local v = v or {} -- Prevent potential future "table doesn't exist" errors self.x = v.x or 0 self.y = v.y or 0 self.shakeOffsetX = v.shakeOffsetX or 0 self.shakeOffsetY = v.shakeOffsetY or 0 self.shakeSpeed = v.shakeSpeed or 0 self.offsetAmountX = v.offsetAmountX or 4 -- How far offset do you want the tile to move self.offsetAmountY = v.offsetAmountY or 4 -- from its centered point? self.drawX = v.drawX or self.x -- Set up the default position in case shake values are 0 self.drawY = v.drawY or self.y end function blockObject:update(dt) if self.shakeSpeed > 0 then self.shakeOffsetX = self.shakeOffsetX + dt * (self.shakeSpeed * self.offsetAmountX) self.shakeOffsetY = self.shakeOffsetY + dt * (self.shakeSpeed * self.offsetAmountY) self.drawX = self.x + math.sin(self.shakeOffsetX) self.drawY = self.y + math.sin(self.shakeOffsetY) end end function blockObject:draw() -- Handle drawing the block here love.graphics.draw(my image, self.drawX, self.drawY, ...) end
Code: Select all
-- To create the blocks block = {} for y=1, #map do block[x] = {} for x=1, #map[y] do if map[y][x] == 1 then block[x][y] = blockObject { x = x * 32, y = y * 32, shakeOffsetX = math.random() * math.pi, shakeOffsetY = math.random() * math.pi, shakeSpeed = whateverYouWant, ... } end end end
Code: Select all
-- In Update for y=1, #map do for x=1, #map[y] do if map[y][x] == 1 then block[x][y]:update(dt) end end end
You should give a thread more than just 12 hours before bumping. It's frowned upon to bump too soon. Threads don't fall off the first page easily on this forum. Give it a few days before bumping.Code: Select all
-- In Draw for y=1, #map do for x=1, #map[y] do if map[y][x] == 1 then block[x][y]:draw() end end end
- Jasoco
- Inner party member
- Posts: 3726
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Shaking love.graphics.drawn objects
The top one should be in its own file.
The second one is in the level creation function.
You can use the same method for anything that should be an object.
Try implementing the code and play around with it. You can make a different object for each tile type and have different things happening in each tile.
Also, 12 hours is still too little. It's generally ground upon. Especially since you can easily edit your post with no problem. Technically I am supposed to give you a warning.
The second one is in the level creation function.
You can use the same method for anything that should be an object.
Try implementing the code and play around with it. You can make a different object for each tile type and have different things happening in each tile.
Also, 12 hours is still too little. It's generally ground upon. Especially since you can easily edit your post with no problem. Technically I am supposed to give you a warning.
Who is online
Users browsing this forum: Ahrefs [Bot] and 2 guests