﻿1
00:00:04,380 --> 00:00:06,150
‫أهلا ومرحبا بكم مرة أخرى.

2
00:00:06,240 --> 00:00:12,150
‫الآن لدينا حركة لـ - ، لكننا لا ندير الجزء العلوي من - ، الذي نسميه

3
00:00:12,150 --> 00:00:12,920
‫البرج.

4
00:00:12,930 --> 00:00:16,290
‫لذلك نود أن نكون قادرين على القيام بذلك باستخدام الماوس.

5
00:00:16,320 --> 00:00:18,800
‫الآن ، ألق نظرة على ما يحدث هنا.

6
00:00:18,810 --> 00:00:23,300
‫أثناء تحريك مؤشر الماوس الخاص بي في جميع أنحاء العالم ، أحصل على هذه الكرة الحمراء.

7
00:00:23,310 --> 00:00:27,060
‫هذا هو مجال تصحيح الأخطاء الذي أرسمه في مساحة ثلاثية الأبعاد.

8
00:00:27,300 --> 00:00:33,600
‫لاحظ الآن عندما أتحرك على الحائط ، أن الكرة تتحرك عكس سطح الجدار.

9
00:00:33,600 --> 00:00:40,410
‫لذلك أينما يتحرك مؤشر الماوس ، أشعر بالخوف الذي يتوافق مع أي شيء أصطدم

10
00:00:40,410 --> 00:00:43,620
‫به بناءً على موقع المؤشر.

11
00:00:43,620 --> 00:00:50,250
‫وهذا سيكون مفيدًا لنا حتى نتمكن من الحصول على موقع في الفضاء يمكننا أن ندير برجنا

12
00:00:50,250 --> 00:00:51,200
‫نحوه.

13
00:00:51,210 --> 00:00:57,570
‫الآن ، من أجل القيام بذلك ، هناك بعض الوظائف التي نحتاجها على وحدة التحكم ، لذلك علينا الوصول إلى تلك

14
00:00:57,570 --> 00:00:59,250
‫الوظائف على وحدة التحكم.

15
00:00:59,250 --> 00:01:04,140
‫وفي هذا الفيديو ، سنعمل على إعداد ذلك وسنناقش أيضًا كيف سيشمل

16
00:01:04,140 --> 00:01:07,080
‫هذا مفهومًا يُعرف باسم Cast.

17
00:01:07,080 --> 00:01:12,330
‫الآن ، السبب وراء رغبتنا في استخدام وحدة التحكم هو وجود وظائف على وحدة التحكم تسمح لنا

18
00:01:12,330 --> 00:01:14,820
‫بالحصول على نتيجة النتيجة تحت المؤشر.

19
00:01:14,820 --> 00:01:16,860
‫الآن نحن نتحدث عن مؤشر الماوس.

20
00:01:16,860 --> 00:01:20,310
‫لنفترض أن هذه هي شاشتنا وإليك مؤشر الماوس.

21
00:01:20,310 --> 00:01:25,530
‫وتتوافق النقطة الموجودة على رأس المؤشر مع موقع على الشاشة.

22
00:01:25,530 --> 00:01:31,740
‫الآن إذا قمنا بتحريك المؤشر حوله ، فإن هدفنا هو أن يتم تدوير الجزء العلوي من الخزان الخاص

23
00:01:31,740 --> 00:01:37,290
‫بنا بحيث يتم تدوير هذا الجزء العلوي من شبكتنا بحيث يواجه اتجاه هذا المؤشر.

24
00:01:37,440 --> 00:01:44,370
‫الآن إذا قمنا بتحريك المؤشر ، فهناك وظيفة على وحدة التحكم يمكننا استخدامها للحصول

25
00:01:44,370 --> 00:01:47,190
‫على الموقع المقابل لذلك المؤشر.

26
00:01:47,190 --> 00:01:52,830
‫إذا أردنا رسم خط مستقيم من الكاميرا باتجاه المؤشر وضربنا شيئًا ما في

27
00:01:52,830 --> 00:01:59,700
‫العالم ، فيمكننا الحصول على هذا الموقع واستخدام هذا الموقع لضبط دوران برج الخزان.

28
00:01:59,730 --> 00:02:00,960
‫اسمحوا لي أن أريكم ما أعنيه.

29
00:02:00,960 --> 00:02:06,420
‫الآن ، من أجل الحصول على موقع الوصول هذا المطابق لمؤشرنا ، نحتاج إلى استخدام وحدة التحكم.

30
00:02:06,420 --> 00:02:09,480
‫الآن ، دعنا نتحدث عن جهاز التحكم للحظة وجيزة.

31
00:02:09,780 --> 00:02:11,880
‫لنفترض أن لدينا بيدقنا في العالم.

32
00:02:11,880 --> 00:02:13,950
‫البيدق سيكون له جهاز تحكم.

33
00:02:14,130 --> 00:02:18,210
‫هذا شيء غير مرئي مرتبط بالبيدق.

34
00:02:18,210 --> 00:02:24,180
‫الآن ، بالنسبة إلى البيدق الخاص بنا ، ستحصل وحدة التحكم الخاصة بنا على وحدة تحكم اللاعب من النوع

35
00:02:24,180 --> 00:02:27,720
‫A وفي بداية اللعبة ، ستمتلك وحدة التحكم البيدق.

36
00:02:27,750 --> 00:02:32,790
‫هذا هو السبب في أنه يمكننا أن نرى من وجهة نظر الكاميرا التي تنتمي إلى خزان البيدق لدينا.

37
00:02:32,790 --> 00:02:34,890
‫الآن يمكننا الوصول إلى وحدة التحكم هذه.

38
00:02:34,920 --> 00:02:38,970
‫ترث فئة الخزان لدينا وظيفة تسمى Get Controller.

39
00:02:38,970 --> 00:02:41,100
‫إنها موروثة من - الطبقة.

40
00:02:41,100 --> 00:02:46,950
‫لذا ما نود فعله هو الحصول على وحدة التحكم هذه وتخزينها في متغير حتى نتمكن من استخدامها للوصول

41
00:02:46,950 --> 00:02:51,270
‫إلى الوظيفة التي نحتاجها للحصول على نتيجة النتيجة تحت المؤشر.

42
00:02:51,270 --> 00:02:53,010
‫لذلك دعونا نجهز أنفسنا لذلك.

43
00:02:53,010 --> 00:02:58,650
‫أنا الآن هنا في فئة الدبابات والمكان الذي نحتاجه للوصول إلى وحدة التحكم الخاصة بنا هو بدء اللعب.

44
00:02:58,680 --> 00:03:05,190
‫إذا قمنا بذلك في المُنشئ ، فهذا مبكر جدًا وقد لا يكون لدينا وحدة تحكم صالحة حتى الآن.

45
00:03:05,190 --> 00:03:08,910
‫لذلك سنحتاج إلى وظيفة بدء التشغيل هنا في فئة الخزان.

46
00:03:08,910 --> 00:03:14,250
‫الآن لدينا هنا في فئة بيس بونج وحتى الآن لا نستخدم بداية اللعب في فئة

47
00:03:14,250 --> 00:03:15,090
‫بيس بونج.

48
00:03:15,270 --> 00:03:18,450
‫لذا ما أود فعله هو نقله إلى فئة الخزان.

49
00:03:18,450 --> 00:03:24,150
‫لذلك سأقوم بتسليط الضوء على بدء التشغيل ، بما في ذلك التعليق والقسم المحمي هنا وسأقوم

50
00:03:24,150 --> 00:03:25,500
‫ببساطة بقصه.

51
00:03:25,500 --> 00:03:28,710
‫ثم عدت إلى مرحلة الخزان ، سأقوم بلصقها.

52
00:03:28,710 --> 00:03:33,960
‫دعنا نضيف هذا القسم المحمي هنا أعلى القسم الخاص مباشرة مع بدء اللعب بالداخل.

53
00:03:33,960 --> 00:03:36,270
‫الآن قمنا بإزالة "بدء اللعب" من البيدق الأساسي.

54
00:03:36,840 --> 00:03:41,430
‫لم يعد لدينا هنا ، لكننا نحتاج أيضًا إلى إزالته من قاعدة بركة cpp.

55
00:03:41,460 --> 00:03:42,240
‫ها هو.

56
00:03:42,240 --> 00:03:48,960
‫يمكننا المضي قدمًا وحذفها هنا والآن أعلناها هنا في Tank H ، لكننا نحتاج أيضًا

57
00:03:48,960 --> 00:03:51,330
‫إلى تعريفها في الخزان CPP.

58
00:03:51,360 --> 00:03:55,830
‫لذلك سأقوم بتعريف الوظيفة مباشرة أسفل مكون إدخال مشغل الإعداد.

59
00:03:55,830 --> 00:04:00,660
‫لذلك سيكون باطلاً ابدأ اللعب بدون معلمات الإدخال.

60
00:04:00,870 --> 00:04:06,840
‫هناك جسم الوظيفة ونحتاج أيضًا إلى خزان يحدد اسم الوظيفة مسبقًا.

61
00:04:06,840 --> 00:04:09,930
‫الآن نحن نعلم أنه من المهم أن نطلق على اللعبة دورًا كبيرًا.

62
00:04:09,930 --> 00:04:17,010
‫وبهذه الطريقة ، سيستمر استدعاء أي وظيفة في وظيفة بدء التشغيل وأي فئة من الفئات الرئيسية.

63
00:04:17,340 --> 00:04:18,960
‫لذلك بدأنا اللعب هنا.

64
00:04:18,990 --> 00:04:22,560
‫هذا هو المكان الذي يمكننا فيه الحصول على وحدة التحكم الخاصة بنا وتخزينها في متغير.

65
00:04:22,560 --> 00:04:25,920
‫لنعد إلى Tank H وننشئ متغيرًا.

66
00:04:25,920 --> 00:04:30,750
‫الآن سيكون هذا خاصًا وسأقوم بإلصاقه هنا في أسفل القسم

67
00:04:30,750 --> 00:04:38,460
‫الخاص وسيكون نوع مؤشر وحدة تحكم اللاعب ويمكننا استدعاء مرجع وحدة تحكم اللاعب هذا.

68
00:04:38,460 --> 00:04:40,920
‫سيكون هذا مرجعنا إلى وحدة تحكم اللاعب.

69
00:04:40,950 --> 00:04:43,590
‫الآن نحن لا نتحدث عن مرجع C ++.

70
00:04:43,590 --> 00:04:48,750
‫لا يزال هذا مجرد مؤشر ، لكننا سنستخدمه للإشارة إلى وحدة تحكم اللاعب.

71
00:04:48,750 --> 00:04:55,560
‫الآن لدينا متغير مرجع وحدة تحكم اللاعب من نوع وحدة تحكم المشغل ونحن على استعداد لتخزين وحدة

72
00:04:55,590 --> 00:04:57,600
‫التحكم في هذا المؤشر.

73
00:04:57,600 --> 00:05:02,730
‫لنعد إلى Tank Dot CP هنا ونبدأ اللعب ونحاول القيام بذلك.

74
00:05:02,730 --> 00:05:03,330
‫لذا.

75
00:05:03,400 --> 00:05:12,100
‫ما سأفعله هو أن أقول لاعب ، وحدة تحكم ، المرجع يساوي وسأحاول استدعاء وحدة تحكم.

76
00:05:12,880 --> 00:05:17,440
‫الآن الحصول على تحكم ، كما ذكرت في - فئة.

77
00:05:17,470 --> 00:05:24,070
‫يتيح النقر بزر الماوس الأيمن والانتقال إلى التعريف ولاحظ أن هذه الوظيفة تقوم بإرجاع وحدة تحكم A.

78
00:05:24,100 --> 00:05:29,020
‫الآن المتغير الخاص بنا هو من نوع وحدة تحكم المشغل ، وليس وحدة تحكم.

79
00:05:29,020 --> 00:05:35,260
‫إذن ما نحاول القيام به هنا هو أخذ القيمة المعادة من الحصول على وحدة التحكم ، وهي من

80
00:05:35,260 --> 00:05:40,270
‫نوع مؤشر وحدة التحكم ونحاول تخزينها في مؤشر وحدة تحكم اللاعب A.

81
00:05:40,300 --> 00:05:42,330
‫لاحظ أننا نرى اللون الأحمر المتعرج هنا.

82
00:05:42,340 --> 00:05:43,940
‫تقول قيمة النوع.

83
00:05:43,960 --> 00:05:48,080
‫لا يمكن تعيين مؤشر تحكم إلى كيان من النوع.

84
00:05:48,100 --> 00:05:49,630
‫وحدة تحكم اللاعب.

85
00:05:49,660 --> 00:05:51,210
‫حصلنا على خطأ.

86
00:05:51,220 --> 00:05:55,390
‫دعنا نلقي نظرة هنا على وثائق وحدة التحكم.

87
00:05:55,420 --> 00:05:56,400
‫إلق نظرة.

88
00:05:56,410 --> 00:05:58,030
‫ها هي وحدة التحكم.

89
00:05:58,030 --> 00:06:00,460
‫وتقول الميراث ، التسلسل الهرمي.

90
00:06:00,460 --> 00:06:05,690
‫وأسفل وحدة التحكم نرى وحدة تحكم وجهاز تحكم في اللاعب.

91
00:06:05,710 --> 00:06:10,210
‫هذا يعني أن وحدة التحكم في اللاعب هي فئة تابعة لوحدة التحكم.

92
00:06:10,240 --> 00:06:14,500
‫الآن ، في C ++ ، لا يمكننا الحصول على مؤشر من النوع.

93
00:06:14,530 --> 00:06:20,200
‫وحدة تحكم اللاعب تخزن قيمة عنوان وحدة التحكم.

94
00:06:20,530 --> 00:06:22,600
‫المتحكم هو نوع الأصل.

95
00:06:22,780 --> 00:06:25,450
‫وحدة تحكم اللاعب هي نوع الطفل.

96
00:06:25,450 --> 00:06:30,960
‫لا يمكنك أخذ كائن من النوع الأصل وتخزينه في مؤشر من النوع الفرعي.

97
00:06:30,970 --> 00:06:32,680
‫فكيف نتغلب على هذا؟

98
00:06:32,680 --> 00:06:34,000
‫إذن هذه هي مشكلتنا.

99
00:06:34,000 --> 00:06:38,630
‫ترجع وظيفة الحصول على وحدة التحكم عنوان وحدة التحكم A.

100
00:06:38,650 --> 00:06:44,410
‫الآن ، هذا شيء يمكننا تخزينه في مؤشر وحدة تحكم A ، لكن لا يمكننا تخزينه في مؤشر وحدة تحكم

101
00:06:44,410 --> 00:06:45,410
‫اللاعب A.

102
00:06:45,430 --> 00:06:52,000
‫الشيء المضحك هو أن الكائن الذي تم إرجاعه بواسطة وحدة التحكم هو في الواقع وحدة تحكم اللاعب.

103
00:06:52,000 --> 00:06:58,630
‫لذلك لدينا هذا العنوان في شكل مؤشر تحكم ونعلم أنه يخزن وحدة تحكم اللاعب ، ولكن إذا كان لدينا

104
00:06:58,630 --> 00:07:03,910
‫في شكل وحدة تحكم A ، لا يمكننا الوصول إلى الوظيفة التي نحتاجها لأنها موجودة

105
00:07:03,910 --> 00:07:06,210
‫على وحدة تحكم اللاعب .

106
00:07:06,220 --> 00:07:08,810
‫تسمى الوظيفة الحصول على نتيجة تحت المؤشر.

107
00:07:08,830 --> 00:07:15,250
‫الآن إذا كانت لدينا قيمة لمؤشر وحدة التحكم من النوع A وحاولنا الحصول على هذه الوظيفة الموجودة على

108
00:07:15,250 --> 00:07:18,430
‫وحدة تحكم اللاعب ، فسوف نفشل في القيام بذلك.

109
00:07:18,460 --> 00:07:20,020
‫سنحصل على خطأ في التجميع.

110
00:07:20,020 --> 00:07:25,960
‫بما أننا نعلم أن الكائن نفسه عبارة عن وحدة تحكم في المشغل ، فإنه يتم تخزينه في مؤشر وحدة تحكم.

111
00:07:25,960 --> 00:07:27,610
‫كيف نتغلب على هذه المشكلة؟

112
00:07:27,610 --> 00:07:29,980
‫الجواب هو أننا يجب أن نلقي.

113
00:07:30,010 --> 00:07:36,100
‫نحن نعلم أن وحدة التحكم هي فئة الأصل وأن وحدة التحكم في اللاعب هي فئة الأطفال.

114
00:07:36,100 --> 00:07:41,320
‫ونعلم أنه لا يمكن أن يكون لدينا وحدة تحكم مخزنة في مؤشر وحدة تحكم اللاعب A.

115
00:07:41,320 --> 00:07:46,750
‫نحن نعلم أنه يمكننا الذهاب في الاتجاه المعاكس ولدينا مخزن لمؤشر وحدة التحكم ، وهو كائن لوحدة تحكم

116
00:07:46,750 --> 00:07:47,530
‫اللاعب.

117
00:07:47,620 --> 00:07:53,290
‫هذا في الواقع ما نراه عندما نسميه الحصول على وحدة تحكم ، فإنه يعيد مؤشر وحدة تحكم يشير

118
00:07:53,290 --> 00:07:55,120
‫إلى وحدة تحكم اللاعب A.

119
00:07:55,120 --> 00:08:01,810
‫لذلك إذا كانت لدينا قيمة لمؤشر وحدة تحكم من النوع A ، فيمكننا استخدام وظيفة خاصة تسمى

120
00:08:01,810 --> 00:08:05,920
‫cast لتحويل نوع المؤشر إلى مؤشر تحكم مشغل A.

121
00:08:05,920 --> 00:08:13,720
‫لذا فإن الصب يغير نوع مؤشر ما إلى نوع مؤشر آخر طالما أن الكائن نفسه هو النوع الذي

122
00:08:13,720 --> 00:08:15,640
‫نحاول الإدلاء به.

123
00:08:15,670 --> 00:08:21,430
‫الآن ، إذا حاولنا الإرسال إلى نوع غير صالح ، على سبيل المثال ، لدينا مؤشر تحكم يشير

124
00:08:21,430 --> 00:08:23,140
‫إلى كائن تحكم اللاعب.

125
00:08:23,140 --> 00:08:30,820
‫إذا حاولنا الإدلاء بالقول ، حرف ، فإن وظيفة cast ترجع فارغة ونقول إننا نفشل في التمثيل.

126
00:08:30,820 --> 00:08:33,160
‫لذا فإن وظيفة الصب تبدو هكذا.

127
00:08:33,190 --> 00:08:36,790
‫إنه قالب تمامًا مثل إنشاء كائن فرعي افتراضي.

128
00:08:36,790 --> 00:08:42,850
‫ستتكيف وظيفة القالب هذه مع النوع المختار وفي هذه الوظيفة ، النوع الذي نمرره هو النوع الذي

129
00:08:42,850 --> 00:08:44,230
‫نختاره أيضًا.

130
00:08:44,230 --> 00:08:45,400
‫لذلك نجتاز هذا النوع.

131
00:08:45,400 --> 00:08:52,570
‫نود وضع اثنين داخل أقواس الزاوية ونمرر المؤشر الذي نرغب في وضعه في الأقواس.

132
00:08:52,570 --> 00:08:53,710
‫هنا مثال.

133
00:08:53,710 --> 00:08:59,410
‫لنفترض أننا نرغب في الإرسال إلى وحدة تحكم اللاعب ومؤشر من نوع وحدة التحكم من النوع A.

134
00:08:59,410 --> 00:09:04,240
‫نمرر المؤشر بين القوسين والنوع الذي نضعه بين قوسين بزاوية.

135
00:09:04,240 --> 00:09:08,590
‫وما يتم إرجاعه هو قيمة مؤشر وحدة تحكم اللاعب من النوع أ.

136
00:09:08,590 --> 00:09:13,720
‫إذن ، هذا هو استدعاء الوظيفة حيث نمرر النوع الموجود بين قوسي الزوايا وقيمة مؤشر وحدة

137
00:09:13,720 --> 00:09:18,550
‫التحكم التي نحصل عليها من الحصول على وحدة التحكم يمكن أن تدخل بين الأقواس.

138
00:09:18,550 --> 00:09:22,630
‫لذلك نحن بحاجة إلى تحديد هذه القيمة التي نحصل عليها من الحصول على وحدة تحكم.

139
00:09:22,630 --> 00:09:24,250
‫سيكون هذا هو التحدي الخاص بك.

140
00:09:24,250 --> 00:09:31,840
‫لذا في بدء اللعب ، استخدم وظيفة الحصول على وحدة التحكم وقم بتمرير هذه القيمة إلى وظيفة الإرسال وإرسالها

141
00:09:31,840 --> 00:09:33,550
‫إلى وحدة تحكم اللاعب.

142
00:09:33,550 --> 00:09:39,490
‫وبعد ذلك يمكنك تخزين النتيجة في مؤشر مرجع وحدة التحكم في المشغل ، وهو من النوع

143
00:09:39,490 --> 00:09:40,120
‫A.

144
00:09:40,120 --> 00:09:42,580
‫أوقف الفيديو وقم بإجراء التمثيل.

145
00:09:45,530 --> 00:09:45,860
‫تمام.

146
00:09:45,860 --> 00:09:49,570
‫لقد انتهينا تقريبًا من كل العمل هنا ونحتاج فقط إلى الإدلاء به.

147
00:09:49,580 --> 00:09:56,000
‫إذن ما سنفعله هو استدعاء دالة الصب ، والتي تحتوي على أقواس زوايا بالإضافة إلى أقواس.

148
00:09:56,000 --> 00:09:59,990
‫وما يوضع بين القوسين هو القيمة التي نرغب في تحديدها.

149
00:09:59,990 --> 00:10:05,060
‫احصل الآن على وحدة التحكم بإرجاع مؤشر وحدة التحكم من النوع أ.

150
00:10:05,060 --> 00:10:07,850
‫سأقوم بتحريك ذلك هنا إلى الأقواس.

151
00:10:07,850 --> 00:10:12,110
‫والنوع الذي نختاره هو وحدة تحكم اللاعب.

152
00:10:14,050 --> 00:10:17,620
‫لذا مرة أخرى نحن نأخذ القيمة التي تم إرجاعها من خلال الحصول على مراقب الحسابات.

153
00:10:17,620 --> 00:10:21,160
‫يؤدي هذا إلى إرجاع مؤشر مراقب أو عنوان.

154
00:10:21,160 --> 00:10:25,000
‫ثم نستخدم Cast لإرسالها إلى وحدة تحكم اللاعب A.

155
00:10:25,000 --> 00:10:31,330
‫نعلم أن الكائن الذي تم إرجاعه بواسطة وحدة تحكم البوابة هو كائن وحدة تحكم لاعب مخزن في مؤشر

156
00:10:31,330 --> 00:10:32,320
‫وحدة تحكم.

157
00:10:32,320 --> 00:10:38,500
‫لذلك بعد أن قمنا بإلقاء هذا ، ما يتم إرجاعه هو مؤشر وحدة تحكم اللاعب من النوع أ.

158
00:10:38,500 --> 00:10:41,410
‫لذلك نحن نخزن ذلك في وحدة تحكم اللاعب المرجع.

159
00:10:41,410 --> 00:10:46,990
‫الآن بعد أن أصبح لدينا وصول إلى وحدة التحكم في شكل مؤشر وحدة تحكم اللاعب A ، يمكننا الوصول إلى الوظيفة

160
00:10:46,990 --> 00:10:50,830
‫التي نحتاجها للحصول على نتيجة نتيجة التتبع تحت المؤشر.

161
00:10:50,830 --> 00:10:55,570
‫باختصار ، استخدمنا الحصول على وحدة تحكم للوصول إلى وحدة التحكم.

162
00:10:55,930 --> 00:11:03,040
‫نستخدم أيضًا وظيفة الإرسال للإرسال من مؤشر وحدة التحكم من النوع A إلى مؤشر وحدة تحكم اللاعب

163
00:11:03,040 --> 00:11:03,670
‫A.

164
00:11:03,670 --> 00:11:10,000
‫الآن يمكننا الوصول إلى الوظيفة التي نحتاجها ، وهي الحصول على نتائج ضرب تحت المؤشر الموجود في فئة

165
00:11:10,000 --> 00:11:11,290
‫وحدة تحكم اللاعب.

166
00:11:11,290 --> 00:11:14,500
‫سنبدأ باستخدام هذه الوظيفة في الفيديو التالي.

167
00:11:14,860 --> 00:11:15,850
‫سأراك قريبا.

