GameDevelopmentWith Perl and SDL       - press start -
PerlSDL
PerlSDL
PerlSDL
Simple DirectMedia Layer
low level access
Video
Audio
Input Devices
cross-platform
Multimedia App                    libSDLDirectX   GDI    framebuffer Xlib   Quartz                                        ...
LGPL v2
Round 1   . . . F IGH T          !
1:1 API
use   strict;use   warnings;use   SDL;use   SDL::Video;use   SDL::Surface;use   SDL::Rect;SDL::init(SDL_INIT_VIDEO);my ($s...
Too low level
Not Perlish at all!
SDLx::* Sugar
use strict;use warnings;use SDLx::App;my $app = SDLx::App->new(        width => 800,        height => 600,);$app->draw_rec...
The Game Loop
while ( $running ) {    get_events();    update_game();    render_scene();}
while( $running ) {    $loops = 0;    while(           get_tick_count() > $next_game_tick           && $loops < $MAX_FRAME...
SDLx::App->run;
use SDLx::App;my $app = SDLx::App->new;$app->add_move_handler( &update );$app->add_event_handler( &player_1 );$app->add_ev...
Avenger
Avenger
sugary syntax
use Avenger title => My Game;update { ... };show { ... };event key_down => sub { ... };event mouse_left => sub { ... };sta...
Box2Dintegration
use Avenger title => My Game;world->gravity( 0, -100 );my $player = world->create_dynamic( x => 30, y => 100 );my $floor =...
Simple games, easy.Complex games, possible!
use Avenger;use MyGame;start MainScreen;
package MyGame::MainScreen;use Avenger;load { ... };unload { ... };update { ... };event { ... };show { ... };1;
Other SDLx Goodies
my $menu = SDLx::Widget::Menu->new;$menu->items(    New Game    =>   sub   {   ...   },    Load Game   =>   sub   {   ... ...
my $text = SDLx::Text->new(    font    => /path/to/my/font.ttf,    color   => white,    h_align => center,    shadow => 1,...
my $music = SDLx::Music->new;$music->data(   intro => {      loops   => 3,      fade_in => 0.5,      volume => 72,   },   ...
my $sprite = SDLx::Sprite::Animated->new;$sprite->load( hero.png )->start;show { $sprite->draw( app ) };
HUGE TODO LIST!
github.com/PerlGameDev    #sdl   (irc.perl.org)sdl-devel-subscribe@perl.org           @SDLPerl
Thank YouFor Playing !  garu@cpan.org     @garu_rj
Game Development with SDL and Perl
Upcoming SlideShare
Loading in...5
×

Game Development with SDL and Perl

12,612

Published on

Over the past couple of years the SDL Perl bindings have gone through a complete rewrite, making them modular, stable, faster, multiplatform, 1:1 compatible with libsdl and fixing several memory leaks while at it.

The community is more alive than ever and now the SDL Perl project is ready to move the Perl motto into gamedev:

"Simple games, easy. Complex games, possible."

In this talk I'll discuss some of the sugar layers being developed on top of SDL Perl, including game loops, widgets, physics engines and full-fledged frameworks for easy game development.

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
12,612
On Slideshare
0
From Embeds
0
Number of Embeds
50
Actions
Shares
0
Downloads
38
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Game Development with SDL and Perl"

  1. 1. GameDevelopmentWith Perl and SDL - press start -
  2. 2. PerlSDL
  3. 3. PerlSDL
  4. 4. PerlSDL
  5. 5. Simple DirectMedia Layer
  6. 6. low level access
  7. 7. Video
  8. 8. Audio
  9. 9. Input Devices
  10. 10. cross-platform
  11. 11. Multimedia App libSDLDirectX GDI framebuffer Xlib Quartz ...MS Windows Linux OS X
  12. 12. LGPL v2
  13. 13. Round 1 . . . F IGH T !
  14. 14. 1:1 API
  15. 15. use strict;use warnings;use SDL;use SDL::Video;use SDL::Surface;use SDL::Rect;SDL::init(SDL_INIT_VIDEO);my ($screen_w, $screen_h) = (800, 600);my $screen = SDL::Video::set_video_mode( $screen_w, $screen_h, 32, SDL_ANYFORMAT);my $blue = SDL::Video::map_RGB($screen->format(), 0, 0, 255);SDL::Video::fill_rect( $screen, SDL::Rect->new(15, 15, 100, 100), $blue);SDL::Video::update_rect($screen, 0, 0, $screen_w, $screen_h);sleep 5; # so we have time to see!
  16. 16. Too low level
  17. 17. Not Perlish at all!
  18. 18. SDLx::* Sugar
  19. 19. use strict;use warnings;use SDLx::App;my $app = SDLx::App->new( width => 800, height => 600,);$app->draw_rect( [15, 15, 100, 100], # rect [0,0,255,255], # blue);$app->update;sleep 5; # so we have time to see!
  20. 20. The Game Loop
  21. 21. while ( $running ) { get_events(); update_game(); render_scene();}
  22. 22. while( $running ) { $loops = 0; while( get_tick_count() > $next_game_tick && $loops < $MAX_FRAMESKIP ) { get_events(); update_game(); $next_game_tick += $SKIP_TICKS; $loops++; } $interpolation = ( get_tick_count() + $SKIP_TICKS - $next_game_tick ) / $SKIP_TICKS; render_scene( $interpolation );}
  23. 23. SDLx::App->run;
  24. 24. use SDLx::App;my $app = SDLx::App->new;$app->add_move_handler( &update );$app->add_event_handler( &player_1 );$app->add_event_handler( &player_2 );$app->add_show_handler( &scene );$app->run;
  25. 25. Avenger
  26. 26. Avenger
  27. 27. sugary syntax
  28. 28. use Avenger title => My Game;update { ... };show { ... };event key_down => sub { ... };event mouse_left => sub { ... };start;
  29. 29. Box2Dintegration
  30. 30. use Avenger title => My Game;world->gravity( 0, -100 );my $player = world->create_dynamic( x => 30, y => 100 );my $floor = world->create_static( y => 50, w => app->w -100 , h => 10,);update { world->update };show { app->clear( [0, 0, 0, 255] ); app->draw_rect( $floor->rect, [0, 255, 0, 255] ); app->draw_rect( $player->rect, [255, 50, 0, 255] ); app->update;};start;
  31. 31. Simple games, easy.Complex games, possible!
  32. 32. use Avenger;use MyGame;start MainScreen;
  33. 33. package MyGame::MainScreen;use Avenger;load { ... };unload { ... };update { ... };event { ... };show { ... };1;
  34. 34. Other SDLx Goodies
  35. 35. my $menu = SDLx::Widget::Menu->new;$menu->items( New Game => sub { ... }, Load Game => sub { ... }, Options => sub { ... }, Quit => sub { ... },);show { $menu->render( app ) };
  36. 36. my $text = SDLx::Text->new( font => /path/to/my/font.ttf, color => white, h_align => center, shadow => 1, bold => 1,);$text->write_to( app, All your base are belong to us.);
  37. 37. my $music = SDLx::Music->new;$music->data( intro => { loops => 3, fade_in => 0.5, volume => 72, }, gameover => { finished => sub { print Done! }, },);$music->play( intro );
  38. 38. my $sprite = SDLx::Sprite::Animated->new;$sprite->load( hero.png )->start;show { $sprite->draw( app ) };
  39. 39. HUGE TODO LIST!
  40. 40. github.com/PerlGameDev #sdl (irc.perl.org)sdl-devel-subscribe@perl.org @SDLPerl
  41. 41. Thank YouFor Playing ! garu@cpan.org @garu_rj
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×