No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
Trang 2XNA 2.0 Game
Programming Recipes
A Problem-Solution Approach
■ ■ ■
Riemer Grootjans
Trang 3XNA 2.0 Game Programming Recipes: A Problem-Solution Approach
Copyright © 2008 by Riemer Grootjans
All rights reserved No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-59059-925-9
ISBN-10 (pbk): 1-59059-925-X
ISBN-13 (electronic): 978-1-4302-0514-2
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
Lead Editor: Ewan Buckingham
Technical Reviewer: Fabio Claudio Ferracchiati
Editorial Board: Clay Andres, Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell,
Jonathan Gennick, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper, Frank Pohlmann,
Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh
Project Manager: Beth Christmas
Copy Editor: Kim Wimpsett
Associate Production Director: Kari Brooks-Copony
Production Editor: Ellie Fountain
Compositor: Susan Glinert
Proofreader: April Eddy
Indexer: Broccoli Information Management
Artist: April Milne
Cover Designer: Kurt Krames
Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013 Phone 1-800-SPRINGER, fax 201-348-4505, e-mail orders-ny@springer-sbm.com, or visit http://www.springeronline.com.
For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600, Berkeley, CA 94705 Phone 510-549-5930, fax 510-549-5939, e-mail info@apress.com, or visit http:// www.apress.com.
Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use eBook versions and licenses are also available for most titles For more information, reference our Special Bulk Sales–eBook Licensing web page at http://www.apress.com/info/bulksales.
The information in this book is distributed on an “as is” basis, without warranty Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly
by the information contained in this work.
The source code for this book is available to readers at http://www.apress.com.
Trang 4To Elisa, the most lovely woman I know Without your love and support,
this would not have been possible.
To my parents, for giving me each and every opportunity.
To my friends and co-workers, for their support and laughs.
Trang 5Contents at a Glance
About the Author xi
About the Technical Reviewer xiii
Acknowledgments xv
Introduction xvii
■ CHAPTER 1 Getting Started with XNA 2.0 1
■ CHAPTER 2 Setting Up Different Camera Modes in Your 3D World 25
■ CHAPTER 3 Working with 2D Images/Textures in XNA 2.0 145
■ CHAPTER 4 Working with Models 247
■ CHAPTER 5 Getting the Most Out of Vertices 355
■ CHAPTER 6 Adding Light to Your Scene in XNA 2.0 499
■ CHAPTER 7 Adding Sounds to Your XNA 2.0 Project 559
■ CHAPTER 8 Networking in XNA 2.0 571
■ INDEX 599
Trang 6■I N D E X
starting from VertexBuffer and
IndexBuffer, 395–396
for structure rendered as TriangleList,
393–394
for structure rendered as TriangleStrip,
394–395
of triangle, 392
writing custom content importer, 439
calculating collision point between
pointer and terrain, 432
Intermediate class, 434
view frustum, 26–27, 33
View matrix, 14, 16, 26, 29, 42, 47, 50, 357
viewAngle variable, 553
viewMatrix node, 91
viewMatrix variable, 40–41
ViewProjection matrix, 212, 242, 542
Visual Studio 2005, 2
■ W
WakeUp method, 168
walls, collision with, 60
.wav sound files, 559–563
WaveBank method, 562
waves, 560
while loop, 94, 400–401, 404, 415–417,
419–420, 447–448
world matrices, 504
ensuring correct lighting when using,
518–519
objects in sight of camera, 54–57
setting different world matrices for
different objects, 252–258
combining multiple
transformations, 254
order of matrix multiplication, 254–258
overview, 252–254
updating, 93–95
worldMatrix node, 91
worldMatrix property, 86 worldMatrix variable, 85 WorldViewProjection matrix, 139, 239 Wrap method, 373
Wrapping mode, 372 Write method, 316, 325, 423, 425, 585 WriteBone method, 279–281
WriteModelMesh method, 279–281 WriteModelStructure method, 279–281
■ X
.x file, 248 XAct, 559 xAllowedRotDir variable, 212 xAmbient variable, 519 xap file, 561
xBlurSize variable, 127–128 Xbox 360, deploying games on, 6–8 connecting Xbox 360 and PCs, 7 Creators Club licenses, 7 generating projects from existing XNA 2.0 projects, 8
installing XNA Game Studio Connect, 7 overview, 6
pairing PCs and Xbox 360, 7 Xbox Live accounts, 6 Xbox Live accounts, setting up, 6 Xbox Live Marketplace, 6 xCamUp parameter, 216 xCamUp variable, 215 xConeAngle variable, 530 xConeDecay variable, 530 xConeDirection variable, 529 xgs binary file, 561
XImporter method, 184 xLightDirection parameter, 523 xLightStrength value, 534
Trang 7626 ■I N D E X
xLightStrength variable, 533
xMirrorTexture variable, 238–242, 245–246
XML file, loading data from, 439–445
creating XNA-compatible XML file from
existing object, 444–445 defining custom MapData class, 442
defining TypeReader capable of serializing
object of MapData class, 443 defining TypeWriter capable of serializing
object of MapData class, 442–443 overview, 439–442
XmlSerializer class, 20, 23
XNA, 470, 481–482
XNA Game Studio 2.0, 1–24
deploying games
on PCs, 8–10
on Xbox 360, 6–8
.fx HLSL files, 5
game loop timing, 10–11
GameComponent class, 11–19
changing updating order of, 18–19
DrawableGameComponent class, 12–13
making subscribe to interfaces, 16–17
overview, 11–12, 15–16
subscribing to ICameraInterface
service, 17–18 using GameComponent class, 14–15
using multiple GameComponents, 18
installing, 1–3
overview, 1
predefined methods, 4–5
saving/loading data, 19–24 creating StorageDevice method asynchronously, 20–22 loading data from disks, 23–24 overview, 20
saving data to disks, 22 starting new projects, 3 XNA Game Studio Connect program, 6–8 XNA Game Studio Device Center, 7 XNA project, accessing data in, 326 XNA-compatible XML file, creating from existing object, 444–445
<XNAContent> tag, 440 XNA-to-HLSL variables, 457–474 XNAUtils class, 95–96
XNAUtils file, 266 xnb files, 183–185, 193, 421 xPreviousShadingMapContents variable, 555 xRelative value, 411
xTexStretch variable, 465 xTexture variable, 298, 553 xTime variable, 121, 224–225, 227, 476 xWaveHeights variable, 474–475, 477, 482–483
xWaveLengths variable, 474–475, 477, 482–483
xWaveSpeeds variable, 475
■ Z
z-buffer (or depth buffer), 29, 32–33, 72, 230 zRelative value, 411