[Παίζει μουσική] ΟΜΙΛΗΤΗΣ 1: Λοιπόν, εδώ είμαστε, το τελευταίο σετ P σε CS50. Συγχαρώ τον εαυτό σας από το να έχουν προχωρήσει τόσο πολύ από την πρώτη σας γεια κόσμους και εκτύπωση πυραμίδες Mario. Κάνατε μια ιστοσελίδα την περασμένη εβδομάδα. Και θα πάμε να κάνει άλλο ένα αυτή την εβδομάδα, το ένα που σας επιτρέπει να οδηγείτε γύρω από την πανεπιστημιούπολη του Χάρβαρντ, επιλέγοντας μέχρι τα μέλη του προσωπικού CS50, και φέρνοντάς τους πίσω για να τους μονοκατοικίες. Τώρα τελευταία εβδομάδα δουλέψαμε σε PHP, μια γλώσσα πλευρά του server. Για αυτό το σύνολο P, είμαστε πάρει εισήγαγε σε JavaScript, το οποίο είναι ένα client side γλώσσα. Έτσι, ας ρίξουμε μια ματιά σε μερικά από τα Κωδικός διανομής που είναι διαθέσιμη σε σας για αυτό το σύνολο P. Στο φάκελο JavaScript, θα υπάρχουν είναι μια δέσμη των αρχείων JavaScript. Υπάρχει buildings.js, το οποίο περιέχει ένα σειρά από κτίρια γύρω από το Χάρβαρντ πανεπιστημιούπολη, με τις πληροφορίες τους και τη θέση. Houses.js είναι μια σειρά από Harvard κατοικίες σπίτια, με τους γεωγραφικά πλάτη και μήκη. Passengers.js περιέχει ένα συστοιχία των επιβατών - τα μέλη του προσωπικού CS50 - ότι θα πρέπει να φέρει πίσω οικιστικών σπίτια τους. Math3D.js, που περιέχει πολλά λειτουργίες να κάνει με την κίνηση. Αν είστε μαθηματικά minded, τότε χαιρετίζω να ρίξετε μια ματιά. Αλλά εσείς δεν χρειάζεται να κατανοήσουν τα πάντα εκεί. Shuttle.js, που ασχολείται με κίνηση του διαστημικού λεωφορείου. Και index.html είναι η αρχική σελίδα, όπου ό, τι συμβαίνει, πραγματικά, όπου η χρήστης αλληλεπιδρά με την περιοχή. Service.css είναι το φύλλο στυλ CSS, το οποίο, εκτός από το Twitter Bootstrap βιβλιοθήκη, οι έλεγχοι πώς index.html εμφάνιση. Και τότε έχουμε επίσης service.js, η οποία περιέχει λειτουργίες των υπηρεσιών για το λεωφορείο. Και εδώ είναι όπου θα πάμε να συμπληρώνοντας μερικά από τα dos να. Τώρα, ας ρίξουμε μια ματιά στα αντικείμενα και associative arrays σε JavaScript, που για όλες τις προθέσεις και τους σκοπούς είναι εναλλάξιμα. Αν ήθελα να κάνω ένα αντικείμενο μια μεταβλητή ονομάζεται ραβδί, θα ήθελα να κηρύξει. Και μέσα σε αυτά τα άγκιστρα θα ήθελα προσδιορίζει ο πυρήνας είναι μονόκερος. Το ξύλο είναι κεράσι. Και το μήκος είναι 13. Τώρα μπορούν να έχουν πρόσβαση οι τιμές αντικειμένων χρησιμοποιώντας associative array σημειογραφία. Έτσι ραβδί δομικός δείκτης, μπορώ να ορίσετε που ισούται με μονόκερος, ή βεβαιωθείτε ότι, αν χρειαστεί. Ή μπορώ να χρησιμοποιήσω τον τελεστή τελεία. Ξύλο ραβδί dot ισούται με κεράσι, και ούτω καθεξής, και ούτω καθεξής. Έτσι, θα δείτε ότι συνειρμική πίνακες και Τα αντικείμενα σε JavaScript πρόκειται να είναι εναλλάξιμα, και τη θέληση έρχονται σε αρκετά βολικό. Τότε θα δείτε μια σειρά από κτίρια σε buildings.js. Και πάλι, μια σειρά από αντικείμενα. Αν ήθελα να κάνω μια σειρά από τα καλύτερα κτίρια στην πανεπιστημιούπολη του Χάρβαρντ, στη συνέχεια, Θα ήθελα να το κάνω ως εξής. Χρησιμοποιώντας αυτή την σημειογραφία αντικειμένου, όπου Φυλάξω τη ρίζα, το όνομα, τη διεύθυνση, γεωγραφικό πλάτος, μήκος και πλάτος για κάθε μεμονωμένο αντικείμενο κτίριο. Ας μιλήσουμε για γρήγορα μεταβλητές σε JavaScript. Όπως PHP, μεταβλητές JavaScript Οι ασθενώς ή χαλαρά πληκτρολογήσει. Για να δημιουργήσετε μια τοπική μεταβλητή, θα πρόθεμα το όνομα της μεταβλητής με τον V-Α-Κ, var. Τώρα το JavaScript, λειτουργίες θα περιορίσουν το πεδίο μεταβλητών. Έτσι, εάν έχετε μια τοπική μεταβλητή μέσα μια λειτουργία, τότε άλλες λειτουργίες δεν μπορεί να έχει πρόσβαση. Αλλά σε αντίθεση με C, βρόχοι και οι προϋποθέσεις δεν περιορίσει το πεδίο μιας μεταβλητής. Έτσι ακόμα κι αν το δηλώσετε μέσα από ένα κατάσταση, η όλη λειτουργία θα έχουν πρόσβαση σε αυτό. Τώρα χωρίς var, η μεταβλητή θα είναι παγκόσμιες. Έτσι, αν απλά να δηλώσει το όνομα και εκχωρήσετε μια τιμή, τότε η μεταβλητή θα είναι μια καθολική μεταβλητή σε JavaScript. Τώρα σε σπίτια, έχουμε μια συνειρμική σειρά από αντικείμενα τύπου σπίτι, όπου κάθε σπίτι είναι απλά ένα γεωγραφικό πλάτος και ένα γεωγραφικό μήκος. Στη συνέχεια έχουμε τους επιβάτες συστοιχία, η οποία είναι ένας πίνακας του τύπου αντικειμένου επιβατών. Έτσι, κάθε επιβάτης έχει ένα όνομα χρήστη, ένα όνομα, και ένα σπίτι. Παρατηρήστε ότι βλέπω από τον τύπο επιβατών, το οποίο πραγματικά σημαίνει απλά ότι κάθε αντικείμενο έχει το ίδιο κλειδί ζευγάρι αξία. Έτσι, κάθε αντικείμενο τύπου επιβάτης έχει ένα όνομα χρήστη, ένα όνομα, και ένα σπίτι. Έτσι, αυτό που χρειαζόμαστε για να κάνει για το σύνολο P; Λοιπόν, θα πρέπει να επιτρέψει στους χρήστες για να πάρει μέχρι τα μέλη του προσωπικού, για να εμφανίσετε όλες τα μέλη του προσωπικού που είναι σήμερα σε λεωφορείο μας, και να τους αφήσω. Και τότε θα μιλήσουμε επίσης για extra χαρακτηριστικά που μπορούν να εφαρμοστούν για το σύνολο P λεωφορείο. Αλλά ας μιλήσουμε για το πρώτο pickup. Τα πρόσωπα του προσωπικού CS50 έχουν φυτευτεί σε όλη την πανεπιστημιούπολη, όπου κάθε πρόσωπο υλοποιείται ως ένα σημάδι χώρα σχετικά με την 3D γη, και ως δείκτη στον 2D χάρτη. Έτσι όταν ο χρήστης κάνει κλικ στο pickup κουμπί, θέλουμε να προσθέσουμε σε κοντινή απόσταση επιβάτες στο λεωφορείο. Και θέλουμε επίσης να αφαιρέσει τη θέση τους σήμα από τον κόσμο, και αφαιρέστε τους δείκτη από τον χάρτη, υποδεικνύοντας ότι θα είστε σε λεωφορείο μας τώρα. Επομένως, πώς θα ανιχνεύσει αν οι επιβάτες βρίσκονται εντός του εύρους της μεταφοράς μας; Λοιπόν, η απόσταση λειτουργίας - έτσι λεωφορείο απόσταση dot, περνώντας το γεωγραφικό πλάτος και μήκος, θα υπολογίσει την απόσταση από την τρέχουσα θέση της μεταφοράς προς το σημείο που καθορίζετε με αυτό γεωγραφικό πλάτος και μήκος. Έτσι, μπορείτε να χρησιμοποιήσετε αυτό για να υπολογίσει το απόσταση από το λεωφορείο για το επιβάτες. Αλλά πώς ξέρετε πού οι επιβάτες είναι; Λοιπόν, αυτό είναι όπου θα πρέπει να επεξεργαστείτε τη λειτουργία κατοικηθεί. Συμπλήρωση θέσεων όλων των μελών του προσωπικού και των επιβατών στον κόσμο, και εντός του χάρτη, αλλά δεν αποθήκευση της θέσης τους. Έτσι, ίσως μπορείτε να αποθηκεύσετε τους τοποθετήστε σήματα και δείκτες σε κάποια παγκόσμια σειρά. Τώρα υπάρχει ήδη μια παγκόσμια σειρά αποθήκευση πληροφοριών από τους επιβάτες. Τα καταστήματα επιβάτες πίνακα καθένα όνομα του επιβάτη και το σπίτι τους. Έτσι, ίσως μπορείτε να προσθέσετε μερικές παραμέτρους εκεί για τα επιβατηγά αντικείμενα. Για να μας βοηθήσει να εντοπίσουμε όλους τους επιβάτες εντός της εμβέλειας του λεωφορείο μας, ας βρόχος μέσω όλων των επιβατών στη συστοιχία επιβάτες. Ένας βρόχος for στην JavaScript μπορεί να μοιάζει κάτι σαν αυτό, είναι πολύ παρόμοια με εκείνες για βρόχο C. Ή μπορούμε να χρησιμοποιήσουμε ένα εναλλακτική λύση για τη δομή βρόχου. Για var i σε σειρά, όπου θα εξακολουθεί να είναι ο δείκτης. Αλλά εσείς δεν χρειάζεται να καθορίσετε το μήκος του array dot κατάσταση, και εγώ συν συν. Θέση κάθε επιβάτη είναι δίνεται από το σήμα θέση τους. Αλλά το σήμα τόπος δεν είναι η γεωγραφικό πλάτος και γεωγραφικό μήκος. Πρέπει να έχουν πρόσβαση σε αυτές τις παραμέτρους να πάρει τη γεωμετρία, χρησιμοποιώντας get γεωμετρία για το σήμα τόπου. Και στη συνέχεια, αφού έχουμε τη γεωμετρία, να πάρει είτε το γεωγραφικό πλάτος ή γεωγραφικό μήκος, χρησιμοποιώντας αυτές τις λειτουργίες. Έτσι τώρα ξέρουμε πώς να ανιχνεύσει αν οι επιβάτες βρίσκονται εντός εύρος λεωφορείο μας. Μόλις έχουμε τους επιβάτες, θα θέλετε να προσθέσετε τυχόν επιβάτες που είναι εντός αυτού του φάσματος. Θέλουμε να τους επιτρέψει να λυκίσκου, και να λάβει μια θέση στο λεωφορείο μας, αλλά μόνο αν έχουμε αρκετό χώρο για αυτούς. Η σειρά καθισμάτων dot λεωφορείο θα αναφέρει εάν τα καθίσματα είναι άδεια, ή που είναι στο κάθισμα. Έτσι, αν το κάθισμα είναι άδειο, τότε ότι η έδρα θα είναι μηδενική. Έτσι, τη συνεχή επανάληψη του πίνακα θέσεων, έλεγχο για κενές θέσεις, την αποθήκευση επιβάτες σε αυτές τις θέσεις μέχρι να δεν έχουν ακόμη κενές θέσεις. Και, δυστυχώς, κάθε άλλο επιβάτες Θα πρέπει να περιμένουμε για την την επόμενη φορά που το λεωφορείο έρχεται γύρω. Μόλις μπουν στο λεωφορείο, θα ήθελα για να αφαιρέσετε το σήμα θέση τους, η οποία είναι η φωτογραφία τους στο 3D κόσμο. Αν ήθελα να αφαιρέσετε ένα p σήμα θέση, τότε θα πάρει όλα τα χαρακτηριστικά από τη γη μου, από το Google Earth, και στη συνέχεια αφαιρέστε ότι συγκεκριμένο τόπο σήμα χρησιμοποιώντας τη λειτουργία removeChild. Στη συνέχεια, τέλος, ας καταργήσετε το δείκτη, το εικονίδιο στην 2D χάρτη για κάθε επιβατών που έχουν πάρει. Για να αφαιρέσετε ένα δείκτη, m, τότε εγώ θα μόλις εκτελέσει m dot setMap null. Κάνετε αυτό για κάθε επιβατών εντός της εμβέλειας, και έχετε τελειώσει pickup.