XNA 2.0 Game Programming Recipes A Problem-Solution Approach ■■■ Riemer Grootjans XNA 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 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 To 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 Contents at a Glance About the Author xi About the Technical Reviewer xiii Acknowledgments xv Introduction xvii ■CHAPTER Getting Started with XNA 2.0 ■CHAPTER Setting Up Different Camera Modes in Your 3D World 25 ■CHAPTER Working with 2D Images/Textures in XNA 2.0 145 ■CHAPTER Working with Models 247 ■CHAPTER Getting the Most Out of Vertices 355 ■CHAPTER Adding Light to Your Scene in XNA 2.0 499 ■CHAPTER Adding Sounds to Your XNA 2.0 Project 559 ■CHAPTER Networking in XNA 2.0 571 ■INDEX 599 v ■I N D E X starting from VertexBuffer and IndexBuffer, 395–396 worldMatrix property, 86 for structure rendered as TriangleList, 393–394 WorldViewProjection matrix, 139, 239 for structure rendered as TriangleStrip, 394–395 Wrapping mode, 372 of triangle, 392 writing custom content importer, 439 worldMatrix variable, 85 Wrap method, 373 Write method, 316, 325, 423, 425, 585 WriteBone method, 279–281 calculating collision point between pointer and terrain, 432 WriteModelMesh method, 279–281 Intermediate class, 434 ■X 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, WriteModelStructure method, 279–281 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 ■W connecting Xbox 360 and PCs, WakeUp method, 168 Creators Club licenses, walls, collision with, 60 wav sound files, 559–563 generating projects from existing XNA 2.0 projects, WaveBank method, 562 installing XNA Game Studio Connect, waves, 560 overview, while loop, 94, 400–401, 404, 415–417, 419–420, 447–448 pairing PCs and Xbox 360, 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 Xbox Live accounts, Xbox Live accounts, setting up, Xbox Live Marketplace, xCamUp parameter, 216 xCamUp variable, 215 xConeAngle variable, 530 xConeDecay variable, 530 xConeDirection variable, 529 order of matrix multiplication, 254–258 xgs binary file, 561 overview, 252–254 XImporter method, 184 updating, 93–95 worldMatrix node, 91 xLightDirection parameter, 523 xLightStrength value, 534 625 626 ■I N D E X xLightStrength variable, 533 saving/loading data, 19–24 xMirrorTexture variable, 238–242, 245–246 creating StorageDevice method asynchronously, 20–22 XML file, loading data from, 439–445 creating XNA-compatible XML file from existing object, 444–445 loading data from disks, 23–24 defining custom MapData class, 442 saving data to disks, 22 defining TypeReader capable of serializing object of MapData class, 443 defining TypeWriter capable of serializing object of MapData class, 442–443 overview, 439–442 overview, 20 starting new projects, XNA Game Studio Connect program, 6–8 XNA Game Studio Device Center, XNA project, accessing data in, 326 XmlSerializer class, 20, 23 XNA-compatible XML file, creating from existing object, 444–445 XNA, 470, 481–482 tag, 440 XNA Game Studio 2.0, 1–24 XNA-to-HLSL variables, 457–474 deploying games XNAUtils class, 95–96 on PCs, 8–10 XNAUtils file, 266 on Xbox 360, 6–8 xnb files, 183–185, 193, 421 fx HLSL files, xPreviousShadingMapContents variable, 555 game loop timing, 10–11 xRelative value, 411 GameComponent class, 11–19 xTexStretch variable, 465 changing updating order of, 18–19 xTexture variable, 298, 553 DrawableGameComponent class, 12–13 xTime variable, 121, 224–225, 227, 476 making subscribe to interfaces, 16–17 overview, 11–12, 15–16 xWaveHeights variable, 474–475, 477, 482–483 subscribing to ICameraInterface service, 17–18 xWaveLengths variable, 474–475, 477, 482–483 using GameComponent class, 14–15 xWaveSpeeds variable, 475 using multiple GameComponents, 18 ■Z installing, 1–3 overview, predefined methods, 4–5 z-buffer (or depth buffer), 29, 32–33, 72, 230 zRelative value, 411 .. .XNA 2. 0 Game Programming Recipes A Problem- Solution Approach ■■■ Riemer Grootjans XNA 2. 0 Game Programming Recipes: A Problem- Solution Approach Copyright © 20 08 by Riemer Grootjans All rights... data in, 326 XmlSerializer class, 20 , 23 XNA- compatible XML file, creating from existing object, 444–445 XNA, 4 70, 481–4 82 tag, 4 40 XNA Game Studio 2. 0, 1? ?24 XNA- to-HLSL variables,... 444–445 loading data from disks, 23 ? ?24 defining custom MapData class, 4 42 saving data to disks, 22 defining TypeReader capable of serializing object of MapData class, 443 defining TypeWriter capable