Difference between revisions of "Fizz X"

Line 16: Line 16:
  
 
* Space partitioning to reduce the number of collision tests. It can be disabled, although this is not recommended especially if your simulation contains many dynamic shapes.
 
* Space partitioning to reduce the number of collision tests. It can be disabled, although this is not recommended especially if your simulation contains many dynamic shapes.
 +
 +
== Example ==
 +
<source lang="lua">
 +
fizz = require("fizzx")
 +
fizz.setGravity(0, 100)
 +
 +
ball = fizz.addDynamic('circle', 300, 100, 10)
 +
wall = fizz.addStatic('rect', 300, 400, 200, 10)
 +
 +
ball.bounce = 0.5
 +
 +
function love.update(dt)
 +
  fizz.update(dt)
 +
end
 +
 +
function love.draw()
 +
  love.graphics.circle("fill", ball.x, ball.y, ball.r)
 +
  love.graphics.rectangle("fill", wall.x - wall.hw, wall.y - wall.hh, wall.hw*2, wall.hh*2)
 +
end
 +
</source>
  
 
== Links ==
 
== Links ==

Revision as of 09:11, 9 October 2024

Fizz is a lightweight collision library in Lua. It's designed specifically for old-school platformers and overhead action games. Fizz is licensed under the MIT License.

Features

  • Three different shape types: circles, rectangles and line segments.
  • Line segments can be used for making slopes and possibly "one-sided" platforms. They handle collision differently based on direction and "push" other intersecting shapes at 90 degrees counter-clockwise of the segment slope.
  • Static shapes - static shapes are immobile and do not respond to collisions or gravity.
  • Kinematic shapes - kinematic shapes do not respond to collisions or gravity, but can be moved by manually changing their velocity. Kinematic shapes can be used to simulate moving platforms and doors.
  • Dynamic shapes respond to collisions and gravity. Dynamic shapes can be used to simulate the moving objects in your game.
  • Space partitioning to reduce the number of collision tests. It can be disabled, although this is not recommended especially if your simulation contains many dynamic shapes.

Example

fizz = require("fizzx")
fizz.setGravity(0, 100)

ball = fizz.addDynamic('circle', 300, 100, 10)
wall = fizz.addStatic('rect', 300, 400, 200, 10)

ball.bounce = 0.5

function love.update(dt)
  fizz.update(dt)
end

function love.draw()
  love.graphics.circle("fill", ball.x, ball.y, ball.r)
  love.graphics.rectangle("fill", wall.x - wall.hw, wall.y - wall.hh, wall.hw*2, wall.hh*2)
end

Links