DEVDAYS 2011 Ioannis Panagopoulos, MVP ipplos@gmail.com http://www.progware.org
Για σήμερα... Main Game Loop Αρχές προγραμματισμού Framework Χωροχρόνος του WP7 και οργάνωση Timing, FPS, Display, Orientations, GameComponents Controls Τρόποι User Input στο WP7 Ειδικά θέματα στα παιχνίδια Collision Detection,Physics Engines,Parallax Scrolling, Tile based Basic 3D Models Μοντέλα, Φωτισμός, Texturing, Κάμερα
Main Game Loop Όλα ζωντανεύουν με την επανάληψη των Update - Draw Initialize Update Draw Dispose Initialize() LoadContent() Update() Draw() Dispose() Sprite Placement Collision Detection Controls Polling Network Drawing Applying Effects Demo1
Display Modes Orientation:Portrait Orientation:LandscapeRight Orientation:LandscapeLeft Διάφορα Orientations στα οποία μπορεί το παιχνίδι να λειτουργήσει Περιορίζονται με την SupportedOrientations. Διατηρεί το Aspect Ratio (προσχή στο FullScreen)
Πώς περνάει ο χρόνος Variable Time Step Update Draw Update Draw Update Draw Update t Fixed Time Step Οι Update γίνονται σε συγκεκριμένα χρονικά διαστήματα Αν χάσει κάποια προσπαθεί να τα αναπληρώσει Αν χάσει πολλά θέτει IsRunningSlowly=true t
Πραγματικός Χρόνος FIXED TIME STEP: Υπολογισμός FPS VARIABLE TIME STEP: Υπολογισμός FPS VELOCITY: Fixed Time Step Demo2
GameComponents (Decentralize) Update Draw Οι Update και οι Draw καταλήγουν να ελέγχουν όλο το παιχνίδι (Game Class) Δεν υπάρχει πιθανότητα επαναχρησιμοποίησης κομματιών Game Class Update GameComponent1.Update GameComponent2.Update Draw GameComponent1.Draw GameComponent2.Draw GameComponentN.Update GameComponentN.Draw Demo3
Controls WP7 (Multitouch) Μπορούμε να δούμε τις ικανότητες της συσκευής (πόσα δάχτυλα ταχυτόχρονα αναγνωρίζει;) Κάθε Touch παίρνει ένα Id και επιβιώνει από την αρχή της επαφής μέχρι το τέλος Κάθε Touch έχει μία κατάσταση (Pressed, Moved, Released) 33443222 (50,50) Pressed 33443223 (400,50) Pressed 33443224 (260,400) Pressed
Controls WP7 (Multitouch) Μπορούμε να δούμε τις ικανότητες της συσκευής (πόσα δάχτυλα ταχυτόχρονα αναγνωρίζει;) Κάθε Touch παίρνει ένα Id και επιβιώνει από την αρχή της επαφής μέχρι το τέλος Κάθε Touch έχει μία κατάσταση (Pressed, Moved,Released) 33443222 (60,50) Moved 33443223 (400,50) Released 33443224 (260,400) Released Demo4
Controls WP7 (Gestures) Μιά χορογραφία από Touches Ένεργοποιούνται με την EnableGestures και το ποιές υποστηρίζονται ορίζεται από το enumeration GestureType Στην Update ανακαλύπτουμε την παρουσία τους ελεγχοντας αρχικά την IsGestureAvailable. Properties όπως Position, Delta δίνουν τις πληροφορίες (Delta in pixels/second). (Πηγή: http://adamkinney.com/blog/2010/09/23/windows-phone-7-gestures-cheat-sheet/) Demo5
Accelerometer x z y To Accelerometer επιστρέφει ένα τρισδιάστατο διάνυσμα σχετικά με τις δυνάμεις g που δέχεται σε κάθε έναν από τους τρεις άξονες. Στα παιχνίδια οδήγησης εκμετταλευόμαστε μόνο τη θέση της συσκεύης (πού κατανέμεται το g Το μοναδιαίο Vector) Ή μας ενδιαφέρει και το μέγεθος του g (max 2g) Demo6
Αλγόριθμοι Physics Engines Collision Detection in 2D Bounding Sphere Bounding Rectangles Per Pixel Out of Bounds Detection Per Pixel Physics Engines Προσοχή στις μονάδες του κόσμου Μετατροπή αυτών σε pixels και αντίστροφα Διάφορα Parallax Scrolling Tile Based Gaming Scene Management
Φυσική Βασικές Εξισώσεις Αναγωγή meters σε pixels Κλιμακα
Miscellaneous Services Isolated Storage: Αποθηκεύοντας την κατάσταση του παιχνιδιού (πχ Scores, Save Games etc) Gamer Services: API για κλήσεις σε υπηρεσίες του κινητού όπως αναγνώριση του Trial Mode, εμφάνιση μηνυμάτων και πληκτρολογίου κα. TombStoning: Διαδικασία που καταλαβαίνεται ό το παιχνίδι πήγε στο «παρασκήνιο». Launchers: Xρήση υπηρεσιών του τηλεφώνου μέσα από το παιχνίδι. Demo7
ΧΝΑ στις 3 Διαστάσεις! Ο τρισδιάστατος κόσμος και τα μαθηματικά του...
Ο κόσμος στις 3 Διαστάσεις! Σύστημα Συντεταγμένων Σχεδίαση 3D μοντέλων Left handed system Clockwise positive Demo8
Ο κόσμος μέσα από την κάμερα Position: Η θέση της κάμερας στο χώρο LookAt: Το προς τα που είναι στραμμένη CameraUpVector: Ποιό είναι το πάνω για την κάμερα. LookAt (0,0,0)
Ο κόσμος μέσα από την κάμερα Position: Η θέση της κάμερας στο χώρο LookAt: Το προς τα που είναι στραμμένη CameraUpVector: Ποιό είναι το πάνω για την κάμερα. LookAt (0,0,5)
Position: Η θέση της κάμερας στο χώρο LookAt: Το προς τα που είναι στραμμένη CameraUpVector: Ποιό είναι το πάνω για την κάμερα. Τύπος της κάμερας: Όπου ορίζεται το εύρος θέασης και η ελάχιστη/μέγιστη απόσταση ορατού κόσμου. Ο κόσμος μέσα από την κάμερα
Κίνηση στον κόσμο Translate: Μετακίνηση στο χώρο Rotate Χ,Υ,Ζ: Περιστροφή στους τρεις άξονες Scale: Μεγένθυση/Σμίκρυνση Σημαντικό ρόλο παίζει η σειρά Demo9
Φωτισμός - Textures Ambient Light: Ο περιβάλλοντας φωτισμός. Directional Light: Όπως του ηλίου Specular Light: Το φώς από ένα Spotlight. Emissive Light: Φώς που εκπέμπει ένα αντικείμενο. Τα textures λειτουργούν ως «περιτύλλιγμα» στα μοντέλα του κόσμου σας. Demo10
Miscellaneous Models: Meshes, Mesh Parts, Bones και γενικά ο τρόπος που συνδένται τα αντικείμενα του κόσμου μέσα σε κάθε μοντέλο Custom Shaders: Διάφοροι τρόπου που γίνονται Render τα μοντέλα στην οθόνη και πώς χρησιμοποιείται η πληροφορία που έχουν Blend, Depth and Sampler States: Πώς αλληλεπιδρούν τα χρώματα, πώς ορίζεται το βάθος στην οθόνη (ποιά αντικείμενα είναι μπρος και ποιά πίσω), πώς θα εμφανίζονται τα textures. Content Processors: Custom κλάσεις για τον τρόπο διαχείρισης του Content (αυτά που τοποθετείτε στο ομώνυμο project και ο τρόπος που εισάγονται στο παιχνίδι)
Βιβλιογραφία-Πήγές ΧΝΑ 4.0 Game Development by Example: Μόνο 2D αλλά πολλές τεχνικές XNA 4.0 Game Studio 4.0 Programming: 3D, 2D πολλά στοιχεία και για WP7, XBOX http://www.progware.org: Εισαγωγικά για 2D XNA, Collision Detection, Physics Engine http://create.msdn.com/en-us/education/gamedevelopment: Εισαγωγή στην XNA για WP7. http://www.techdays.gr: Υπάρχει μία παρουσίαση για XNA 2D εισαγωγικά.
DEVDAYS 2011 Ioannis Panagopoulos, MVP ipplos@gmail.com http://www.progware.org ΕΥΧΑΡΙΣΤΩ Did U { }?