Game Development with SDL and Perl

  • 11,468 views
Uploaded 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 …

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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
11,468
On Slideshare
0
From Embeds
0
Number of Embeds
49

Actions

Shares
Downloads
36
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. GameDevelopmentWith Perl and SDL - press start -
  • 2. PerlSDL
  • 3. PerlSDL
  • 4. PerlSDL
  • 5. Simple DirectMedia Layer
  • 6. low level access
  • 7. Video
  • 8. Audio
  • 9. Input Devices
  • 10. cross-platform
  • 11. Multimedia App libSDLDirectX GDI framebuffer Xlib Quartz ...MS Windows Linux OS X
  • 12. LGPL v2
  • 13. Round 1 . . . F IGH T !
  • 14. 1:1 API
  • 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. Too low level
  • 17. Not Perlish at all!
  • 18. SDLx::* Sugar
  • 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. The Game Loop
  • 21. while ( $running ) { get_events(); update_game(); render_scene();}
  • 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. SDLx::App->run;
  • 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. Avenger
  • 26. Avenger
  • 27. sugary syntax
  • 28. use Avenger title => My Game;update { ... };show { ... };event key_down => sub { ... };event mouse_left => sub { ... };start;
  • 29. Box2Dintegration
  • 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. Simple games, easy.Complex games, possible!
  • 32. use Avenger;use MyGame;start MainScreen;
  • 33. package MyGame::MainScreen;use Avenger;load { ... };unload { ... };update { ... };event { ... };show { ... };1;
  • 34. Other SDLx Goodies
  • 35. my $menu = SDLx::Widget::Menu->new;$menu->items( New Game => sub { ... }, Load Game => sub { ... }, Options => sub { ... }, Quit => sub { ... },);show { $menu->render( app ) };
  • 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. 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. my $sprite = SDLx::Sprite::Animated->new;$sprite->load( hero.png )->start;show { $sprite->draw( app ) };
  • 39. HUGE TODO LIST!
  • 40. github.com/PerlGameDev #sdl (irc.perl.org)sdl-devel-subscribe@perl.org @SDLPerl
  • 41. Thank YouFor Playing ! garu@cpan.org @garu_rj