1945c5fbff96c639687f4a0693716f6387dbed37
[sdlgit/SDL_perl.git] / lib / SDL / Tutorial.pm
1 #!/usr/bin/env perl
2 #
3 # Tutorial.pm
4 #
5 # Copyright (C) 2005 David J. Goehrig <dgoehrig@cpan.org>
6 #
7 # ------------------------------------------------------------------------------
8 #
9 # This library is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU Lesser General Public
11 # License as published by the Free Software Foundation; either
12 # version 2.1 of the License, or (at your option) any later version.
13
14 # This library is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 # Lesser General Public License for more details.
18
19 # You should have received a copy of the GNU Lesser General Public
20 # License along with this library; if not, write to the Free Software
21 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22 #
23 # ------------------------------------------------------------------------------
24 #
25 # Please feel free to send questions, suggestions or improvements to:
26 #
27 #       David J. Goehrig
28 #       dgoehrig@cpan.org
29 #
30
31 package SDL::Tutorial;
32
33 use strict;
34 use warnings;
35
36 use SDL;
37 use SDL::App;
38
39 # change these values as necessary
40 my  $title                   = 'My SDL App';
41 my ($width, $height, $depth) = ( 640, 480, 16 );
42
43 my $app = SDL::App->new(
44         -width  => $width,
45         -height => $height,
46         -depth  => $depth,
47         -title  => $title,
48 );
49
50 # your code here; remove the next line
51 sleep 2;
52
53 1;
54
55 __END__
56
57 =head1 NAME
58
59 SDL::Tutorial - introduction to Perl SDL
60
61 =head1 SYNOPSIS
62
63         # to read this tutorial
64         $ perldoc SDL::Tutorial
65
66         # to create a bare-bones SDL app based on this tutorial
67         $ perl -MSDL::Tutorial -e 1
68
69 =head1 SDL BASICS
70
71 SDL, the Simple DirectMedia Layer, is a cross-platform multimedia library.
72 These are the Perl 5 bindings.  You can find out more about SDL at
73 L<http://www.libsdl.org/>.
74
75 Creating an SDL application with Perl is easy.  You have to know a few basics,
76 though.  Here's how to get up and running as quickly as possible.
77
78 =head2 Surfaces
79
80 All graphics in SDL live on a surface.  You'll need at least one.  That's what
81 L<SDL::App> provides.
82
83 Of course, before you can get a surface, you need to initialize your video
84 mode.  SDL gives you several options, including whether to run in a window or
85 take over the full screen, the size of the window, the bit depth of your
86 colors, and whether to use hardware acceleration.  For now, we'll build
87 something really simple.
88
89 =head2 Initialization
90
91 SDL::App makes it easy to initialize video and create a surface.  Here's how to
92 ask for a windowed surface with 640x480x16 resolution:
93
94         use SDL::App;
95
96         my $app = SDL::App->new(
97                 -width  => 640,
98                 -height => 480,
99                 -depth  => 16,
100         );
101
102 You can get more creative, especially if you use the C<-title> and C<-icon>
103 attributes in a windowed application.  Here's how to set the window title of
104 the application to C<My SDL Program>:
105
106         use SDL::App;
107
108         my $app = SDL::App->new(
109                 -height => 640,
110                 -width  => 480,
111                 -depth  => 16,
112                 -title  => 'My SDL Program',
113         );
114
115 Setting an icon is a little more involved -- you have to load an image onto a
116 surface.  That's a bit more complicated, but see the C<-name> parameter to
117 C<SDL::Surface->new()> if you want to skip ahead.
118
119 =head2 Working With The App
120
121 Since C<$app> from the code above is just an SDL surface with some extra sugar,
122 it behaves much like L<SDL::Surface>.  In particular, the all-important C<blit>
123 and C<update> methods work.  You'll need to create L<SDL::Rect> objects
124 representing sources of graphics to draw onto the C<$app>'s surface, C<blit>
125 them there, then C<update> the C<$app>.
126
127 B<Note:>  "blitting" is copying a chunk of memory from one place to another.
128
129 That, however, is another tutorial.
130
131 =head1 SEE ALSO
132
133 =over 4
134
135 =item L<SDL::Tutorial::Drawing>
136
137 basic drawing with rectangles
138
139 =item L<SDL::Tutorial::Animation>
140
141 basic rectangle animation
142
143 =item L<SDL::Tutorial::Images>
144
145 image loading and animation
146
147 =back
148
149 =head1 AUTHOR
150
151 chromatic, E<lt>chromatic@wgz.orgE<gt>.  
152
153 Written for and maintained by the Perl SDL project, L<http://sdl.perl.org/>.
154
155 =head1 COPYRIGHT
156
157 Copyright (c) 2003 - 2004, chromatic.  All rights reserved.  This module is
158 distributed under the same terms as Perl itself, in the hope that it is useful
159 but certainly under no guarantee.