1 00:00:00,000 --> 00:00:00,988 2 00:00:00,988 --> 00:00:09,880 >> [音乐播放] 3 00:00:09,880 --> 00:00:13,360 >> 扬声器1:嗯,我们在这里, 在CS50最后的P组。 4 00:00:13,360 --> 00:00:17,040 从有你们表示祝贺 走了这么远,因为你的第一声问候 5 00:00:17,040 --> 00:00:20,090 世界上并打印出来 金字塔的马里奥。 6 00:00:20,090 --> 00:00:21,930 你做了一个网站的最后一周。 7 00:00:21,930 --> 00:00:25,110 而我们将要制作一个又一个 这个星期,一个可以让你 8 00:00:25,110 --> 00:00:28,570 带动周边的哈佛校园里,采摘 高达CS50的工作人员,并 9 00:00:28,570 --> 00:00:31,910 把他们回到自己的 民居。 10 00:00:31,910 --> 00:00:35,400 >> 现在,在上周,我们曾在PHP中, 服务器端语言。 11 00:00:35,400 --> 00:00:38,250 对于这个P组,我们就要介绍 到JavaScript中,这是一个 12 00:00:38,250 --> 00:00:40,600 客户端语言。 13 00:00:40,600 --> 00:00:44,010 因此,让我们来看看一些 公司所提供的分销代码 14 00:00:44,010 --> 00:00:46,210 你这个P组。 15 00:00:46,210 --> 00:00:49,700 >> 在JavaScript文件夹中,将有 是一堆JavaScript文件。 16 00:00:49,700 --> 00:00:53,600 有buildings.js,它包含一个 哈佛周围建筑物的数组 17 00:00:53,600 --> 00:00:57,340 校园里,与他们的信息 和位置。 18 00:00:57,340 --> 00:01:01,630 Houses.js是哈佛的数组 住宅房屋,其 19 00:01:01,630 --> 00:01:04,030 经度和纬度。 20 00:01:04,030 --> 00:01:07,020 Passengers.js包含一个 乘客阵列 - 21 00:01:07,020 --> 00:01:08,600 在CS50的工作人员 - 22 00:01:08,600 --> 00:01:11,640 你会被带回至 他们居住的房子。 23 00:01:11,640 --> 00:01:16,450 >> Math3D.js,它包含了很多 功能做的运动。 24 00:01:16,450 --> 00:01:19,500 如果你是数学头脑, 那么我欢迎你来看看。 25 00:01:19,500 --> 00:01:23,530 但你并不需要了解 一切都在那里。 26 00:01:23,530 --> 00:01:26,710 Shuttle.js,与交易 航天飞机的运动。 27 00:01:26,710 --> 00:01:31,450 和index.html的是主页, 一切都发生了,真的,那里的 28 00:01:31,450 --> 00:01:33,610 用户互动的网站。 29 00:01:33,610 --> 00:01:39,110 >> Service.css是CSS样式表, 其中,除了Twitter的 30 00:01:39,110 --> 00:01:43,960 引导程序库,控制 如何index.html的样子。 31 00:01:43,960 --> 00:01:48,190 然后我们也有service.js,这 包含服务功能 32 00:01:48,190 --> 00:01:49,010 穿梭。 33 00:01:49,010 --> 00:01:53,010 下面是你要去的地方是 填写一些到DOS。 34 00:01:53,010 --> 00:01:56,600 >> 现在让我们来看看对象和 关联数组在JavaScript中, 35 00:01:56,600 --> 00:01:59,360 这对于所有意图和目的 是可以互换的。 36 00:01:59,360 --> 00:02:03,030 如果我想使一个对象的变量 所谓的魔杖,我会 37 00:02:03,030 --> 00:02:04,290 声明它。 38 00:02:04,290 --> 00:02:08,789 和那些大括号我会内 指定核心是麒麟。 39 00:02:08,789 --> 00:02:10,220 木材是樱花。 40 00:02:10,220 --> 00:02:12,710 和长度为13。 41 00:02:12,710 --> 00:02:16,370 >> 现在我也可以访问值 使用对象 42 00:02:16,370 --> 00:02:18,270 关联数组表示法。 43 00:02:18,270 --> 00:02:22,610 所以魔杖指数的核心,我可以设置 这等于麒麟,或 44 00:02:22,610 --> 00:02:24,710 检查,如果我需要。 45 00:02:24,710 --> 00:02:26,510 或者,我可以使用点运算符。 46 00:02:26,510 --> 00:02:30,280 魔杖点木等于樱桃, 等等,等等。 47 00:02:30,280 --> 00:02:33,930 所以你看到,关联数组和 在JavaScript对象都将是 48 00:02:33,930 --> 00:02:37,720 互换和意志 进来很方便。 49 00:02:37,720 --> 00:02:41,570 >> 然后,我们看到建筑的数组 在buildings.js。 50 00:02:41,570 --> 00:02:43,870 再次,对象的数组。 51 00:02:43,870 --> 00:02:48,500 如果我想做出最好的一个数组 在哈佛校园的建筑物,然后 52 00:02:48,500 --> 00:02:49,710 我想使它成为如下。 53 00:02:49,710 --> 00:02:55,250 使用此对象表示法,其中 我存储的根,名称,地址, 54 00:02:55,250 --> 00:03:00,260 纬度,经度和每 单体建筑对象。 55 00:03:00,260 --> 00:03:02,930 >> 让我们快速谈谈变量 在JavaScript中。 56 00:03:02,930 --> 00:03:07,760 像PHP,JavaScript变量 是弱或松散类型。 57 00:03:07,760 --> 00:03:14,120 要创建一个局部变量,你前缀 变量名与V-A-R,变种。 58 00:03:14,120 --> 00:03:17,010 >> 现在,在JavaScript中,函数会 限制变量的范围。 59 00:03:17,010 --> 00:03:20,600 因此,如果你在有一个局部变量 一个函数,那么其他功能 60 00:03:20,600 --> 00:03:22,060 不能访问它。 61 00:03:22,060 --> 00:03:26,090 但是,与C,循环和条件不 限制变量的范围。 62 00:03:26,090 --> 00:03:30,600 >> 所以,即使你的内声明它 条件,整个功能将 63 00:03:30,600 --> 00:03:32,810 可以访问它。 64 00:03:32,810 --> 00:03:35,820 现在还没有变种,变 将是全球性的。 65 00:03:35,820 --> 00:03:39,170 所以,如果你只需要声明的名称和 指定一个值,则该变量 66 00:03:39,170 --> 00:03:41,900 将是一个全局变量 在JavaScript中。 67 00:03:41,900 --> 00:03:48,480 >> 现在的房子,我们有一个关联 房子类型对象的数组,其中 68 00:03:48,480 --> 00:03:52,100 每一个房子只是一个纬度 和经度。 69 00:03:52,100 --> 00:03:55,140 那么我们有乘客 阵列,它是一个数组 70 00:03:55,140 --> 00:03:57,370 的对象类型的乘客。 71 00:03:57,370 --> 00:04:01,620 所以,每一位乘客都有一个用户名, 一个名字,和一所房子。 72 00:04:01,620 --> 00:04:04,840 请注意,我看到的类型 乘客,这真的只是意味着 73 00:04:04,840 --> 00:04:08,150 每个对象都有 同样的键值对。 74 00:04:08,150 --> 00:04:12,830 所以型乘用车的每一个对象都有 一个用户名,一个名称和一个房子。 75 00:04:12,830 --> 00:04:14,850 >> 那么,我们需要 这样做对于P组? 76 00:04:14,850 --> 00:04:20,779 好了,我们需要允许用户选择 了工作人员,以显示所有的 77 00:04:20,779 --> 00:04:25,090 工作人员目前正在 我们的班车,并把它们关闭。 78 00:04:25,090 --> 00:04:29,280 然后,我们也将讨论额外的 给可实现的功能 79 00:04:29,280 --> 00:04:30,980 穿梭P设置。 80 00:04:30,980 --> 00:04:33,610 >> 但是,让我们来谈谈皮卡第一。 81 00:04:33,610 --> 00:04:37,480 CS50工作人员的面孔已经 种满校园,其中每个 82 00:04:37,480 --> 00:04:41,750 脸是作为一个地方标志 的三维地球上,作为一个 83 00:04:41,750 --> 00:04:44,030 标记的2D地图上。 84 00:04:44,030 --> 00:04:47,880 因此,当用户单击拾取 按钮,我们希望附近的加 85 00:04:47,880 --> 00:04:49,590 乘客穿梭。 86 00:04:49,590 --> 00:04:53,650 我们也想删除自己的位置 来自世界纪念,并删除其 87 00:04:53,650 --> 00:04:58,060 标记从地图上看,这表明 他们在我们的班车了。 88 00:04:58,060 --> 00:05:02,520 >> 那么,我们如何检测,如果乘客 都在我们的航天飞机范围是多少? 89 00:05:02,520 --> 00:05:04,610 当然,函数距离 - 90 00:05:04,610 --> 00:05:08,770 所以班车点距离,传递 纬度和经度,将 91 00:05:08,770 --> 00:05:12,030 计算从当前的距离 穿梭到的位置 92 00:05:12,030 --> 00:05:15,850 点那个你指定 给定的纬度和经度。 93 00:05:15,850 --> 00:05:19,180 所以,你可以用它来计算 距离从航天飞机到 94 00:05:19,180 --> 00:05:20,310 乘客。 95 00:05:20,310 --> 00:05:24,040 >> 但你怎么知道在哪里 乘客是? 96 00:05:24,040 --> 00:05:27,510 嗯,这就是我们必须 编辑填充功能。 97 00:05:27,510 --> 00:05:32,500 填充所有地方的工作人员 和乘客走向世界, 98 00:05:32,500 --> 00:05:36,300 并进入地图,但不 存储他们的位置。 99 00:05:36,300 --> 00:05:39,850 因此,也许你可以存储自己的 放置标记和标记 100 00:05:39,850 --> 00:05:41,570 在一些全局数组。 101 00:05:41,570 --> 00:05:45,780 >> 现在已有了一个全局数组 乘客存储信息。 102 00:05:45,780 --> 00:05:49,960 每个乘客阵列存储 乘客的姓名和他们的房子。 103 00:05:49,960 --> 00:05:54,985 所以也许你可以添加一些参数 有给乘客的对象。 104 00:05:54,985 --> 00:05:59,290 >> 为了帮助我们检测到所有的乘客 在我们穿梭范围,让我们 105 00:05:59,290 --> 00:06:02,500 通过所有的乘客循环 在乘客阵列。 106 00:06:02,500 --> 00:06:07,790 for循环在JavaScript看起来 这样的事情,非常相似, 107 00:06:07,790 --> 00:06:12,910 这些循环在C或者,我们可以使用一个 替代for循环结构。 108 00:06:12,910 --> 00:06:17,130 >> 对于数组变种我,我在那里 将仍然是指数。 109 00:06:17,130 --> 00:06:20,740 但你并不需要指定 数组长度点 110 00:06:20,740 --> 00:06:23,310 状态,我加再加。 111 00:06:23,310 --> 00:06:26,140 每一个乘客的位置是 通过他们的地方得分。 112 00:06:26,140 --> 00:06:29,800 >> 但这个地方标志是不 纬度和经度。 113 00:06:29,800 --> 00:06:34,575 我们必须通过访问这些参数 获得的几何形状,使用get 114 00:06:34,575 --> 00:06:35,900 几何上的地点标记。 115 00:06:35,900 --> 00:06:39,630 然后一旦我们有几何, 让无论是纬度或 116 00:06:39,630 --> 00:06:42,600 经度,使用这些功能。 117 00:06:42,600 --> 00:06:45,680 >> 所以,现在我们知道如何检测是否 乘客都在 118 00:06:45,680 --> 00:06:47,920 我们的范围内穿梭。 119 00:06:47,920 --> 00:06:52,050 一旦我们有了这些乘客,我们将 要补充的是,任何乘客 120 00:06:52,050 --> 00:06:53,140 内的范围。 121 00:06:53,140 --> 00:06:57,580 我们希望,让他们跳,并 坐我们的班车,但只有 122 00:06:57,580 --> 00:06:59,640 如果我们有足够的空间给他们。 123 00:06:59,640 --> 00:07:04,120 >> 班车点的座位阵列将 表示座位是否是空的,或 124 00:07:04,120 --> 00:07:05,890 谁在那个位子。 125 00:07:05,890 --> 00:07:11,170 所以,如果一个座位是空的,那么 那个座位将为null。 126 00:07:11,170 --> 00:07:15,930 所以遍历数组席位, 检查空座位,存储 127 00:07:15,930 --> 00:07:20,020 乘客进入这些席位,直到你 没有任何更多的空座位。 128 00:07:20,020 --> 00:07:23,330 不幸的是,其他乘客 将必须等待 129 00:07:23,330 --> 00:07:26,000 下一次航天飞机恶有恶报。 130 00:07:26,000 --> 00:07:30,280 >> 一旦他们穿梭取得联系,我们会想 删除自己的位置标记,它 131 00:07:30,280 --> 00:07:32,540 是他们的照片在3D世界中。 132 00:07:32,540 --> 00:07:38,030 如果我想删除一个地方标记P, 然后我会得到所有的功能 133 00:07:38,030 --> 00:07:42,790 从我的地球,从谷歌地球, 然后删除特定的地方 134 00:07:42,790 --> 00:07:45,910 标记使用removeChild功能。 135 00:07:45,910 --> 00:07:51,360 那么最后,让我们删除标记, 在二维地图上的任何图标 136 00:07:51,360 --> 00:07:53,650 乘客,我们正在加快。 137 00:07:53,650 --> 00:07:59,790 要删除标记,M,然后我会 只是执行米点setMap空。 138 00:07:59,790 --> 00:08:02,920 这样做有效范围内的任何乘客, 你已经完成了皮卡。 139 00:08:02,920 --> 00:08:05,056