in reply to Hello world using SDL::App
#!/usr/bin/perl -w use strict; use SDL::App; use SDL::Rect; use SDL::Color; use SDL::Event; my $app = SDL::App->new( -width => 640, -height => 480, -depth => 16, -title => 'My COOL Perl-SDL application.', ); my $rect = SDL::Rect->new( -height => 100, -width => 100, -x => 0, -y => 0, ); my $oldRect = SDL::Rect->new( -height => 100, -width => 100, -x => 0, -y => 0, ); my @color; $color[0] = SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0x00, ); $color[1] = SDL::Color->new( -r => 0xff, -g => 0x00, -b => 0x00, ); $color[2] = SDL::Color->new( -r => 0x00, -g => 0xff, -b => 0x00, ); $color[3] = SDL::Color->new( -r => 0x00, -g => 0x00, -b => 0xff, ); $app->fill( $rect, $color[1] ); $app->update( $rect ); my $bgcolor = $color[0]; my $col = 1; my $fgcolor = $color[$col]; sub draw_frame { my (%args) = @_; $app->fill( $oldRect, $bgcolor); $app->fill( $rect, $fgcolor ); $app->update( $oldRect, $rect ); } sub move() { my ($x,$y) = @_; $rect->x( $x ); $rect->y( $y ); draw_frame(); $oldRect->x( $x ); $oldRect->y( $y ); } sub key { my $key = shift; my $name = $key->key_name; print "Key Pressed: $name\n"; my $x=$rect->x; my $y=$rect->y; if ($name eq "left") { $x -= 10; $x = 540 if $x < 0; &move($x,$y); } elsif ($name eq "right") { $x += 10; $x = 0 if $x > 540; &move($x,$y); } elsif ($name eq "up") { $y -= 10; $y = 380 if $y < 0; &move($x,$y); } elsif ($name eq "down") { $y += 10; $y = 0 if $y > 380; &move($x,$y); } elsif ($name eq "c") { $col++; $col = 1 if $col > 3; $fgcolor = $color[$col]; draw_frame(); } elsif ($name eq "q") { exit(0); } } my %actions = ( SDL_QUIT() => sub { exit(0); }, SDL_KEYDOWN() => \&key, ); $app->loop(\%actions);
|
|---|