=head1 TITLE move_parrot_logo.imc - move a Parrot logo with the SDL Parrot bindings =head1 SYNOPSIS To run this file, be in the Parrot directory and run the following command: $ parrot examples/sdl/move_parrot_logo.imc $ =cut .sub _main @MAIN load_bytecode "library/SDL/App.imc" load_bytecode "library/SDL/Color.imc" load_bytecode "library/SDL/Rect.imc" load_bytecode "library/SDL/Image.imc" load_bytecode "library/SDL/Sprite.imc" load_bytecode "library/SDL/EventHandler.imc" load_bytecode "library/SDL/Event.imc" .local pmc app_args new app_args, .PerlHash set app_args[ 'width' ], 640 set app_args[ 'height' ], 480 set app_args[ 'bpp' ], 0 set app_args[ 'flags' ], 0 .local pmc app .local int app_type find_type app_type, 'SDL::App' app = new app_type .local pmc main_screen main_screen = app.'BUILD'( app_args ) .local pmc black .local int color_type find_type color_type, 'SDL::Color' black = new color_type .local pmc color_args color_args = new PerlHash color_args[ 'r' ] = 0 color_args[ 'g' ] = 0 color_args[ 'b' ] = 0 black.'_new'( color_args ) .local pmc image .local int image_type find_type image_type, 'SDL::Image' image = new image_type image.'_new'( 'examples/sdl/parrot_small.png' ) .local pmc sprite .local int sprite_type find_type sprite_type, 'SDL::Sprite' sprite = new sprite_type .local pmc sprite_args sprite_args = new PerlHash sprite_args[ 'surface' ] = image sprite_args[ 'source_x' ] = 0 sprite_args[ 'source_y' ] = 0 sprite_args[ 'dest_x' ] = 270 sprite_args[ 'dest_y' ] = 212 sprite_args[ 'width' ] = 100 sprite_args[ 'height' ] = 56 sprite_args[ 'bgcolor' ] = black sprite.'_new'( sprite_args ) .local pmc parent_class .local pmc class_type getclass parent_class, 'SDL::EventHandler' subclass class_type, parent_class, 'MoveLogo::EventHandler' .local pmc event_handler .local int handler_type find_type handler_type, 'MoveLogo::EventHandler' event_handler = new handler_type .local pmc event .local int event_type find_type event_type, 'SDL::Event' event = new event_type event.'_new'() .local pmc handler_args handler_args = new .PerlHash handler_args[ 'screen' ] = main_screen handler_args[ 'sprite' ] = sprite event_handler.draw_screen( main_screen, sprite ) event.wait_event( event_handler, handler_args ) .end .namespace [ 'MoveLogo::EventHandler' ] .sub draw_screen method .param pmc screen .param pmc sprite .local pmc prev_rect .local pmc rect (prev_rect, rect) = sprite.draw_undraw( screen ) screen.'update_rects'( prev_rect, rect ) .end .sub key_down_down method .param pmc event_args .local pmc screen .local pmc sprite screen = event_args[ 'screen' ] sprite = event_args[ 'sprite' ] .local int y y = sprite.'y'() if y == 480 goto _draw inc y sprite.'y'( y ) _draw: self.'draw_screen'( screen, sprite ) .end .sub key_down_up method .param pmc event_args .local pmc screen .local pmc sprite screen = event_args[ 'screen' ] sprite = event_args[ 'sprite' ] .local int y y = sprite.'y'() if y == 0 goto _draw dec y sprite.'y'( y ) _draw: self.'draw_screen'( screen, sprite ) .end .sub key_down_left method .param pmc event_args .local pmc screen .local pmc sprite screen = event_args[ 'screen' ] sprite = event_args[ 'sprite' ] .local int x x = sprite.'x'() if x == 0 goto _draw dec x sprite.'x'( x ) _draw: self.'draw_screen'( screen, sprite ) .end .sub key_down_right method .param pmc event_args .local pmc screen .local pmc sprite screen = event_args[ 'screen' ] sprite = event_args[ 'sprite' ] .local int x x = sprite.'x'() if x == 640 goto _draw inc x sprite.'x'( x ) _draw: self.'draw_screen'( screen, sprite ) .end =head1 AUTHOR chromatic, Echromatic at wgz dot orgE. =head1 COPYRIGHT Copyright (c) 2004, The Perl Foundation. =cut