ÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÀ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî >><ðÿÿÿÿÿÿðÿÿÿððÿÿðÿððÿÿððÿðÿÿððÿÿÿðÿÿðÿðÿÿÿÿÿÿððÿðÿÿððÿÿÿÿðÿÿÿðÿðððÿðÿÿðððÿÿðððÿðððððÿðððÿðÿðÿÿðÿÿðÿÿðÿðððÿðÿÿððÿÿðÿðððÿðððÿðÿðððÿðÿÿððððÿÿÿðÿðÿÿðÿðÿðÿðÿÿÿÿÿÿÿððÿðÿÿÿðÿÿÿððððÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððððÿÿÿððÿÿÿÿÿðÿÿÿÿÿÿððÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿððÿÿÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿ1 -- title: Ball Test -- author: Joao Rebeles -- desc: A demo of ball physics -- site: none -- license: MIT License -- version: 0.1 -- script: lua local bola = { x = 120, y = 80, vx = 0, vy = 0, r = 10, agarrada = false, x_anterior = 120, y_anterior = 80, angulo = 0, giro = 0 } -- Limites da sala local SALA_ESQ = 8 local SALA_DIR = 232 local SALA_CIMA = 8 local SALA_BAIXO = 128 function TIC() local mx, my, esquerdo = mouse() -- Distância entre o mouse e a bola local dx = mx - bola.x local dy = my - bola.y local distancia = math.sqrt(dx * dx + dy * dy) -- Pegar a bola if esquerdo and not bola.agarrada and distancia < bola.r then bola.agarrada = true bola.vx = 0 bola.vy = 0 bola.x_anterior = mx bola.y_anterior = my end -- Enquanto a bola estiver sendo segurada if bola.agarrada then bola.x = mx bola.y = my -- Calcular a velocidade do arremesso bola.vx = (mx - bola.x_anterior) * 1.5 bola.vy = (my - bola.y_anterior) * 1.5 bola.x_anterior = mx bola.y_anterior = my -- Soltar a bola if not esquerdo then bola.agarrada = false end else -- Gravidade bola.vy = bola.vy + 0.25 -- Movimento bola.x = bola.x + bola.vx bola.y = bola.y + bola.vy -- Atrito bola.vx = bola.vx * 0.995 -- Física de giro bola.giro = bola.giro + bola.vx * 0.04 bola.angulo = bola.angulo + bola.giro -- Parede esquerda if bola.x - bola.r < SALA_ESQ then bola.x = SALA_ESQ + bola.r bola.vx = -bola.vx * 0.75 bola.giro = -bola.giro * 0.8 end -- Parede direita if bola.x + bola.r > SALA_DIR then bola.x = SALA_DIR - bola.r bola.vx = -bola.vx * 0.75 bola.giro = -bola.giro * 0.8 end -- Teto if bola.y - bola.r < SALA_CIMA then bola.y = SALA_CIMA + bola.r bola.vy = -bola.vy * 0.75 end -- Chão if bola.y + bola.r > SALA_BAIXO then bola.y = SALA_BAIXO - bola.r bola.vy = -bola.vy * 0.75 -- Parar pequenos quicados if math.abs(bola.vy) < 1 then bola.vy = 0 end -- Atrito do chão bola.vx = bola.vx * 0.96 end end -- ===================== -- DESENHO -- ===================== -- Fundo preto cls(0) -- Sala completamente branca rectb( SALA_ESQ, SALA_CIMA, SALA_DIR - SALA_ESQ, SALA_BAIXO - SALA_CIMA, 15 ) -- Bola completamente branca circ( bola.x, bola.y, bola.r, 15 ) -- Cursor do mouse completamente branco circ( mx, my, 2, 15 ) -- Texto completamente branco print( "Ball Test by Joao Rebeles (me)", 70, 2, 15 ) end