[PDD] Add docs for the Parrot_PMC_push_* and Parrot_PMC_pop_* functions
[parrot.git] / examples / sdl / anim_image_dblbuf.pir
bloba28eaa8b0febc2741a99ea7fd983683d63e6e7b9
1 # $Id$
3 =head1 TITLE
5 anim_image_dblbuf.pir - animate an image in a doublebuffered Parrot SDL window
7 =head1 SYNOPSIS
9 To run this file, run the following command from the Parrot root directory:
11     $ ./parrot examples/sdl/anim_image_dblbuf.pir
12     Drew 540 frames in 2.200484 seconds (245.400580 fps)
13     $
15 =cut
17 .sub _main :main
18     load_bytecode "SDL/App.pir"
19     load_bytecode "SDL/Color.pir"
20     load_bytecode "SDL/Rect.pir"
21     load_bytecode "SDL/Image.pir"
22     load_bytecode "SDL/Sprite.pir"
24     .local pmc app
25     app = new ['SDL'; 'App']
26     app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 0, 'flags' => 1073741825 )
28     .local pmc main_screen
29     main_screen = app.'surface'()
31     .local pmc dest_rect
32     dest_rect = new ['SDL'; 'Rect']
33     dest_rect.'init'( 'height' => 100, 'width' => 100, 'x' => 0, 'y' => 190 )
35     .local pmc prev_rect
36     prev_rect = new ['SDL'; 'Rect']
37     prev_rect.'init'( 'height' => 100, 'width' => 101, 'x' => 0, 'y' => 190 )
39     .local pmc source_rect
40     source_rect = new ['SDL'; 'Rect']
41     source_rect.'init'( 'height' => 56, 'width' => 100, 'x' => 0, 'y' => 0 )
43     .local pmc black
44     black = new ['SDL'; 'Color']
45     black.'init'( 'r' => 0, 'g' => 0, 'b' => 0 )
47     .local pmc image
48     image    = new ['SDL'; 'Image']
49     image.'init'( 'examples/sdl/parrot_small.png' )
51     .local pmc sprite
52     sprite = new ['SDL'; 'Sprite']
53     sprite.'init'( 'surface' => image, 'source_x' => 0, 'source_y' => 0, 'dest_x' => 0, 'dest_y' => 190, 'bgcolor' => black )
55     .local num start_time
56     time start_time
58     _animate_on_x_axis( main_screen, sprite,   0, 540,  2)
59     sleep 1
60     _animate_on_x_axis( main_screen, sprite, 540,   0, -2)
62     .local num end_time
63     time end_time
65     .local num total_time
66     total_time = end_time - start_time
67     dec total_time
69     .local num fps
70     fps = 540 / total_time
72     print "Drew 540 frames in "
73     print total_time
74     print " seconds ("
75     print fps
76     print " fps)\n"
78     sleep 1
80     app.'quit'()
81     end
82 .end
84 .sub _animate_on_x_axis
85     .param pmc screen
86     .param pmc sprite
87     .param int start_pos
88     .param int end_pos
89     .param int step_size
90     # PMCs:
91     #    destination SDL::Surface and SDL::Sprite to animate
92     # Ints:
93     #    starting and x coordinates and number of pixels to move at a time
95     .local int x_pos
96     x_pos = start_pos
98 _loop:
99     add x_pos, step_size
100     sprite.'x'( x_pos )
101     sprite.'draw'( screen )
102     screen.'flip'()
103     if x_pos != end_pos goto _loop
104 .end
106 =head1 AUTHOR
108 chromatic, E<lt>chromatic at wgz dot orgE<gt>.
110 =head1 COPYRIGHT
112 Copyright (C) 2004-2008, Parrot Foundation.
114 =cut
116 # Local Variables:
117 #   mode: pir
118 #   fill-column: 100
119 # End:
120 # vim: expandtab shiftwidth=4 ft=pir: