use strict;
use warnings;
use SDL;
use SDL::Rect;
use SDL::Event;
use SDL::Events;
use SDL::Image;
use SDL::Surface;
use SDLx::Surface;
use SDLx::App;
my $app = SDLx::App->new( width => 300, height => 400, depth => 32 );
my $quit = 0;
my $rot = 0;
my $event = SDL::Event->new();
my @stars = ();
foreach ( 0 .. 40 ) {
my $x = rand( $app->w );
my $y = rand( $app->h );
my $speed = rand(4) + 1;
push( @stars, { x => $x, y => $y, speed => $speed } );
}
my $display_matrix = SDLx::Surface->new( surface => $app );
while ( !$quit ) {
SDL::Events::pump_events();
while ( SDL::Events::poll_event($event) ) {
$quit = 1 if $event->type == SDL_QUIT;
if ( $event->type == SDL_KEYDOWN
|| ( $event->key_sym && $event->type != SDL_KEYUP ) )
{
$rot += 0.1 if $event->key_sym == SDLK_UP;
$rot -= 0.1 if $event->key_sym == SDLK_DOWN;
}
}
my @update_rects = ();
foreach (@stars) {
$display_matrix->[ $_->{x} ][ $_->{y} ] = 0xFF000000;
$_->{x} += $_->{speed};
$_->{y} += $_->{speed} * $rot;
$_->{x} = 0 if ( $_->{x} >= $app->w );
$_->{y} = 0 if ( $_->{y} >= $app->h );
$_->{x} = $app->w if ( $_->{x} < 0 );
$_->{y} = $app->h if ( $_->{y} < 0 );
$display_matrix->[ $_->{x} ][ $_->{y} ] = 0xFFFFFFFF;
# push @update_rects, SDL::Rect->new($_->{x}, $_->{y}, 2, 2);
}
$display_matrix->update();
}