I have a sprite that rotates as it rolls around and I’m trying to add a bounce functionality that moves it up then back down but when I try to bounce it bounces in the direction it is rotated to. I am trying to get it to always bounce up, no matter how it is rotated. Anyone have any idea how to do this?
Here is some example code of what I have so far:
--# Main
-- Bounce
-- Use this function to perform your initial setup
function setup()
debugea()
createBallImage()
ball = Sprite(ballImg, 0,0, ballImg.width, ballImg.height)
end
function createBallImage()
ballImg = image(100,100)
setContext(ballImg)
fill(255,255,0)
ellipse(50,50, 100, 100)
sprite("Platformer Art:Guy Standing", 50, 50, 75)
setContext()
end
function bounce(obj)
height = 100
hold = 0.1
local m = obj
local savedScale = vec2(1,1)
local savedPos = obj.pos
local size = obj.size
local squash = vec2(1.5, 0.75)
local moveDown = savedPos.y - size.y/2 * (1 - squash.y)
tween(0.15, m, {scale = squash}, tween.easing.quadInOut)
tween(0.15, m, {pos = vec2(savedPos.x, moveDown)}, tween.easing.quadInOut,
function()
local moveUp = savedPos.y + height * 0.9
local unsquash = vec2(0.85, 1.25)
tween(0.15, m, {scale = unsquash}, tween.easing.quadInOut)
tween(0.2, m, {pos = vec2(savedPos.x, moveUp)}, tween.easing.quadOut,
function()
-- Reached top of jump
local holdHeight = savedPos.y + height
tween(hold, m, {pos = vec2(savedPos.x, holdHeight)}, tween.easing.linear,
function()
tween(0.15, m, {scale = savedScale}, tween.easing.quadInOut)
tween(0.15, m, {pos = savedPos}, tween.easing.quadIn)
end)
end )
end )
--
end
-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(40, 40, 50)
-- This sets the line thickness
strokeWidth(5)
-- Do your drawing here
ball.angle = ball.angle + 1
pushMatrix()
translate(WIDTH/4, HEIGHT/2)
rotate(ball.angle)
ball:draw()
popMatrix()
end
function touched(touch)
if touch.state == ENDED then
bounce(ball)
end
end
--# Sprite
Sprite = class()
function Sprite:init(img, x, y, width, height)
-- you can accept and set parameters here
self.img = img
self.pos = vec2(x,y)
self.size = vec2(width, 0)
self.size.y = height or width
self.scale = vec2(1,1)
self.angle = 0
self.fill = color(255)
end
function Sprite:draw()
pushStyle()
pushMatrix()
fill(self.fill) noStroke()
sprite(self.img, self.pos.x, self.pos.y, self.size.x * self.scale.x, self.size.y * self.scale.y)
popMatrix()
popStyle()
end