A python binding for the great C library raylib.
Please, read this issue for more information.
I intend to use this repository only to publish new raylib-py releases. The source in this repo is pretty much outdated and does not reflect the latest release.
The latest release published here was generated from another project, as mentioned in #45.
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-5.0.0-py3-none-any.whl
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()
Please refer to DOCS.md for v5.0.0b1
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
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.
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