Skip to main content

A simple and easy-to-use library to enjoy videogames programming (written in C, wrapped with ctypes)

Project description

raylib-py

PyPI - Python Version GitHub release (latest by date) GitHub Release Date

PyPI - Wheel PyPI - License PyPI - Downloads

GitHub all releases GitHub release (by tag) GitHub forks

GitHub commit activity GitHub commits since tagged version

A python binding for the great C library raylib.

Release Information:

This release was generated from another project, as mentioned in #45.

How to install:

From PyPI, in the CLI:

$ pip install raylib-py

You can also download the wheel from the releases page and install it with pip locally:

$ pip install path/to/raylib_py-4.5.0-py3-none-any.whl

How to use:

Try this (after installed raylib-py, create a new python file, save the code below into it, then run it):

from raylibpy import *


def main():

    init_window(800, 450, "raylib [core] example - basic window")

    set_target_fps(60)

    while not window_should_close():

        begin_drawing()
        clear_background(RAYWHITE)
        draw_text("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY)
        end_drawing()

    close_window()


if __name__ == '__main__':
    main()

Features:

  • PEP8 naming convention only:

    Structure attributes are in snake_case, classes and other types in PascalCase.

  • Type hinting (not type annotation):

    def get_ray_collision_mesh(ray, mesh, transform):
        # type: (Ray, Mesh, Matrix) -> RayCollision
    
  • structures with functions as methods and properties:

    sound = Sound.load('my/resorces/sound.wav')     # same as load_sound(...)
    position = Vector(4.0, 10.0)
    
    # later...
    sound.play()                                    # same as play_sound(sound)
    length = position.length                        # same as vector2length(position); uses raymath.h functions
    
  • Vector{2,3,4}, Rectangle and Color have attribute swizzling;

    vec3 = Vector3(2.0, 5.0, 3.0)
    vec2 = vec3.zxy                 # vec2 is a Vector2, not a sequence type
    other_vec3 = vec2.xxy           # same thing: other_vec3 is a Vector3
    vec2.xy = vec3.y, other_vec3.z  # sequences can be set as values
    
    c_red = Color(255, 0, 0)
    c_yellow = c_red.rrb
    
    # Rectangles have aliases for width and height: w and h respectively:
    rect = Rectangle(10.0, 10.0, 320.0, 240.0)
    other_rect = rect.whxy          # swizzling is only allowed when using four attributes, not 3 nor 2
    
  • Pretty printing: most structures implement __str__() and __repr__() in a friendly way;

  • Context managers: begin_* and end_* functions can be called as context managers:

    Without context managers:

    # this example shows a rendering step
    
    begin_drawing()
    
    begin_texture_mode(minimap_texture)
    # render the "minimap"
    draw_line(2, 2, 5, 5, RED)
    end_texture_mode(minimap_texture)
    
    begin_mode2d(main_camera)
    # 2d drawing logic...
    draw_texture(minimap_texture, 10, 10, WHITE)
    end_mode2d()
    
    end_drawing()
    

    With context managers:

    # this example shows a rendering step
    
    with drawing():
    
        with texture_mode(minimap_texture):
            # render the minimap
            draw_line(2, 2, 5, 5, RED)
    
        with mode2d(main_camera):
            # 2d drawing logic...
            draw_texture(minimap_texture, 10, 10, WHITE)
    
  • Context managers for some structures: Camera{2,3}D, Shader and others;

    Folowing the example above:

    # this example shows a rendering step
    
    with drawing():
    
        with minimap_texture:
            # render the minimap
            draw_line(2, 2, 5, 5, RED)
    
        with main_camera:
            # 2d drawing logic...
            draw_texture(minimap_texture, 10, 10, WHITE)
    
  • RLGL and RayMath functions exposed

    Includes all symbols in raymath.h and rlgl.h

Issues:

  • Callback for logging will not work

    I've no good workaround for wrapping C functions with variable number of arguments. If you know how to solve this issue, your help would be appreciated.

  • Functions with vararg will not work

    For the reason above.

  • Avoid string manipulation functions

    For the reason above, also because some functions involve memory allocation and manual freeing of resources. Python string methods can provide you with same and more functionality.

  • Some examples are broken due to API changes

    There was some function renaming, some changes in the examples to update to newer releases.

Would you like to have a more customized binding for raylib?

Again, in issue 45 I explain the actual state of this project in more detail.

It my seems like bad news but actually it is the contrary.

Please, take a look at this project: raylibpyctbg

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

raylib-py-5.0.0.tar.gz (5.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

raylib_py-5.0.0-py3-none-any.whl (5.2 MB view details)

Uploaded Python 3

File details

Details for the file raylib-py-5.0.0.tar.gz.

File metadata

  • Download URL: raylib-py-5.0.0.tar.gz
  • Upload date:
  • Size: 5.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for raylib-py-5.0.0.tar.gz
Algorithm Hash digest
SHA256 3eddfea8146e43c4a6235a5527306b6f4881becf52f00330eb34d37eecd73e5f
MD5 93c33afef9f85414be5d29fcc5922c05
BLAKE2b-256 fbc641d31986a3f6acac44bbfb7bbc93c712974880b93d636bfdd9d0d39c1e5a

See more details on using hashes here.

File details

Details for the file raylib_py-5.0.0-py3-none-any.whl.

File metadata

  • Download URL: raylib_py-5.0.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.11

File hashes

Hashes for raylib_py-5.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0886798be3e71eb8b123a6299de038acb74ded20bf099c5fc7e2cac60146708
MD5 2d6b269b1344d5d30789837b461b9b78
BLAKE2b-256 9d450ca198de7defadd3e6fba03b8735d9580e6177d7fea2102730cb6cf74ac0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page