Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Game Development
  2. From Scratch
Gamedevelopment

Ствараем гульню Match-3 з дапамогай Construct 2: падрабязней аб перасоўваннях, гульнявых балах і Matching

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Make a Match-3 Game in Construct 2.
Make a Match-3 Game in Construct 2: Points, Matching, and Gravity
Make a Match-3 Game in Construct 2: Block Movement

Belarusian (беларуская мова) translation by Alex Grigorovich (you can also view the original English article)

У папярэднім уроку мы дадалі сістэму ачкоў для гульні, нарэшце, ўжылі «гравітацыю» да блокаў, і палепшылі нашу сістэму адпаведнасці. У папярэднім уроку мы дадалі сістэму ачкоў для гульні, нарэшце, ўжылі «гравітацыю» да блокаў, і палепшылі нашу сістэму адпаведнасці.  У гэтым уроку мы дадамо невялікія паляпшэнні для нашай сістэмы абмену, дадамо тэкст з якая плавае коскі, які вы можаце ўбачыць у фінальнай версіі гульні, і падвядзем да стандартаў колеру раз і назаўжды.


Выніковая дэма версія гульні

Перад вамі дэма версія гульні, над якой мы будзем працаваць у гэтым уроку.




1. Паляпшэнне механікі перасоўванняў

Зараз у гульні ёсць вельмі просты механізм абмену.  Хоць сістэма, якую мы выкарыстоўваем для выканання перасоўванняў вельмі эфектыўная, ёсць дзве праблемы, з якімі вы маглі сутыкнуцца падчас гульні, і абодва яны павінны быць выпраўленыя да таго, як мы пойдзем далей.

Гэтыя праблемы вынікаюць з той жа ідэі: сістэма абмену блокамі не ўлічвае мяжы гульнявога поля.

Налева, направа

Што гэта сапраўды азначае?  Ну, па-першае, калі вы захочаце, вы можаце перамясціць блок за межы гульнявога поля налева або направа, зрабіўшы своп, як паказана ніжэй:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Калі вы ўвойдзеце ў гульню і перамесціце постаць, вы ўбачыце, што гульня не зробіць нічога, каб спыніць вас, і дзейнічае так, як быццам гульнявое поле працягваецца бясконца ў гарызантальным кірунку. Прычынай гэтага з'яўляецца тое, што прама цяпер гульнявое поле сапраўды працягваецца бясконца.

Паколькі мы не вызначалі, дзе левая і правая межы гульнявога поля, або тое, што гульнявое поле мае левую і правую мяжы, гульня не спрабуе спыніць гульца ад перамяшчэння блока ў бок. Гэтая праблема таксама ўзнікае, калі вы перасоўвае блокі з другога краю гульнявога поля.

Каб вырашыць гэтую праблему, мы дадамо новыя ўмовы ў падзею Block> On DragDrop drop. Перайдзіце да гэтай падзеі і дадайце дадзенае ўмова ў рэдактар ​​падзей, якое правярае перамяшчэння, якія знаходзяцца з левага боку:

Зараз дадайце гэта ўмова ў рэдактар ​​падзей, якое правярае правільныя перамяшчэння:

Вашы левыя і правыя падзеі абмену павінны зараз выглядаць так:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Гэтыя новыя ўмовы, якія мы дадалі, выкарыстоўваюцца падзеямі абмену ў якасці праверкі для забеспячэння таго, што своп знаходзіцца ў гарызантальных межах гульнявога поля. Першы гарантуе, што пазіцыя, па якой блок будзе заменены, знаходзіцца там, дзе межы не выходзяць за левы бок, а другая гарантуе, што пазіцыя, у якой выконваецца абмен блокам, не выходзяць за межы правага боку.

У другім выпадку я выкарыстаў формулу з Block.Width, каб знайсці, дзе самыя правыя блокі павінны гарантаваць, што калі памер блокаў зменіцца, гэта не перашкодзіць гэтай умове працаваць.

Калі вы запусціце гульню, вы больш не зможаце рабіць гарызантальныя перамяшчэння, якія будуць размяшчаць блокі па-за гульнявой зоны.

За межамі

Іншая праблема заключаецца ў тым, што гульня не перашкаджае вам замяняць блок ніжэй гульнявога поля. Адкрыйце гульню і паспрабуйце зрабіць перамяшчэнне блокаў, так, як на малюнку:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Зрабіўшы гэты абмен, вы павінны былі заўважыць, што блок па сутнасці проста знікае за ніжняй часткай гульнявога поля, а блокі, якія над ім, павінны былі зваліцца, каб запоўніць зараз пустое прастору. Зноў жа, гэтая праблема заключаецца ў тым, што мы ніколі не вызначалі, дзе знаходзіцца ніжні край поля.

У папярэднім уроку мы заяўлялі, што блокі павінны перастаць падаць пасля дасягнення пэўнай вышыні, але мы ніколі не казалі, ці было магчыма, каб блок апускаўся ніжэй за гэтую вышыні пры выкананні перамяшчэння.

Гэта будзе так жа проста, як і папярэднія два кроку. Перайдзіце ў рэдактар ​​падзей, якое правярае папярэднія перамяшчэння блокаў і дадае наступнае ўмова:

Ваш код гэтага падзелу павінен выглядаць наступным чынам:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Як і папярэдняе ўмова, гэта гарантуе, што перасоўванне не будзе размяшчаць блок у вобласці па-за гульнявога поля. У гэтым выпадку ён праглядае вобласць пад гульнявым полем.

Калі вы праверыце гульню ў гэты момант, вы не зможаце зрабіць перамяшчэння, якія размяшчаюць блок ніжэй базы гульнявога поля.

На дадзены момант мы вырашылі праблемы з сістэмай падпампоўкі і можам пяройдзем да таго, каб зрабіць нашу сістэму ачкоў яшчэ лепш.


2. Тэкст з якая плавае коскі

Зараз наша сістэма балаў даволі эфектыўная. Яна працуе так, як мы хацелі, і ўжо адлюстроўвае усё правільна. Нягледзячы на ​​гэта, нават, калі вы далі гульні гульца і селі з ім побач, яны, магчыма, не змогуць дакладна сказаць, колькі ачкоў яны атрымаюць ад кожнага пройдзенага ўзроўню, так як гульня можа рухацца хутка.

Каб вырашыць гэтую праблему, мы збіраемся дадаць усплывальныя акенцы, якія адлюстроўваюць, колькі ачкоў гулец набірае ў раўндзе. Гэта дадасць дадатковы візуальны эфект у гульню, і пакажа гульцу, колькі ачкоў ён набірае у раўндзе.

Стварэнне самага тэксту

Перш чым мы зможам дадаць функцыянальныя магчымасці, нам трэба стварыць новы аб'ект, які будзе працаваць як ўсплывальнае акно, для гэтага выканайце наступныя дзеянні.

  1. Перайдзіце да Пласту 1.
  2. Устаўце новы аб'ект Text
    1. Імя: FloatingPointsText
    2. Пласт: Game Field
    3. Размяшчэнне: 616, 250
    4. Памер: 127, 43
    5. Техт: 0
    6. Шрыфт: Calibri, Bold, 24
    7. Колер: 255, 255, 255
  3. На ўкладцы «Праекты» справа пстрыкніце правайкнопкай мышы па аб'екце FloatingPointsText і абярыце Behaviors.
  4. Дадайце новае паводзіны Fade і зачыніце акно Behaviors.
  5. Ва ўласцівасцях, размешчаных у левай частцы экрана, зменіце значэнне Fade Out Time на 1.25.

Аб'ект, які мы толькі што стварылі, будзе выкарыстоўвацца для адлюстравання плавае тэксту, які паведамляе гульцу, колькі ачкоў ён набраў у раўндзе. Цяпер, калі ў нас ёсць гэты аб'ект, нам трэба яго ўжыць, каб, калі гулец складае тры блокі ў шэраг, гэта дзеянне створыць новы асобнік аб'екта і зменіць тэкст, які адлюструе адпаведную колькасць балы.

Стварэнне тэксту, адлюстроўвае колькасць балаў

Каб стварыць тэкст, які адлюстроўвае колькасць балаў, мыдадамо два новых дзеянні ў NumMatchesFound для функцыі FindMatches.

Перайдзіце да функцыі FindMatches і дадайце гэтыя два дзеянні ў канец кожнай умовы NumMatchesFound> 3:

Функцыя FindMatches зараз павінна выглядаць так:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Такім чынам, што робяць гэтыя дзеянні? Першая дзея стварае аб'ект FloatingPointsTextнад першага блока ў групе, а другі памнажае колькасць блокаў у групе на 10, як і формула нашых балаў, і ўстанаўлівае тэкст новага аб'екта на гэты лік.

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Калі вы запусціце гульню на гэтым этапе, вы павінны заўважыць, што тэкст не змяняецца. Каб выправіць гэтую праблему, мы дадамо новае падзея ў нашу гульню.

Перасоўванне тэксту

Вярніцеся да спісу падзей 1 і дадайце новае падзея:

Ваша новае падзея павінна выглядаць так:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Калі вы зараз запусціце гульню, вы ўбачыце, што тэкст змяняецца.

На дадзены момант наш FloatingPointsText працуе так, як мы гэтага хочам, але вы, магчыма, заўважылі невялікую праблему. Сама праблема звязаная з працай самой сістэмы, і зараз, калі мы бачым, што ўсё яшчэ існуе праблема з збіраннем трох блокаў у шэраг, мы можам прыступіць да выпраўлення гэтай памылкі і адкласці працу па гэтай праблеме.


3. Завяршэнне работы па складання трох фігур ў шэраг.

Калі вы яшчэ не ведаеце, аб якой праблеме я кажу, зайдзіце ў гульню і стварыце групу, якая змяшчае чатыры фігуры ў лініі. Пасля стварэння групы вы павінны ўбачыць нешта падобнае да таго, што ў мяне ёсць на малюнку ніжэй:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Як вы можаце бачыць, на самай справе ў нас ёсць два асобніка аб'ектаў з што плавае тэкстам. Калі вы ствараеце групу з пяццю блокамі, праблема становіцца больш, вы ўбачыце тры палі з тэкстам. Прычына гэтага пытання заснавана на тым, як распазнаюцца супадзення.

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Прама зараз наша сістэмы адпаведнасці трох фігур у шэраг правярае кожную фігуру паасобку па кірунку направа і ўніз для таго, каб знайсці супадзення. З-за гэтага сістэма знаходзіць тут тры лініі рознага памеру, хоць на самай справе гэта ўсяго толькі адна вялікая лінія. Першая лінія будзе знойдзена, калі яна пачнецца з блока А і будзе ўтрымліваць пяць блокаў:

Другая лінія будзе знойдзена, калі яна пачнецца з блока B і будзе ўтрымліваць чатыры блока:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

І трэцяя лінія будзе знойдзена, калі яна пачнецца з блока C, і будзе ўтрымліваць тры блокі:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Такім чынам, прама зараз наша сістэма адпаведнасці трох фігур у шэраг неэфектыўная і працуе неправильно- паколькі яна правярае адны і тыя ж лініі некалькі разоў.

Як мы гэта выправім

Выпраўленне гэтай праблемы на самай справе нашмат прасцей, чым можа здацца на першы погляд.

Праблема тут тлумачыцца тым, што сістэма супастаўлення ня распазнае, ці з'яўляецца блок пачаткам лініі. Калі б мы маглі гарантаваць, што мы глядзім толькі на блокі, якія былі самымі далёкімі справа або вышэй, у межах лініі, да якіх яны належалі, тады сістэма адпаведнасці была б эфектыўнай.

Такім чынам, усё, што нам трэба зрабіць, гэта дадаць ўмова або падзея, якое вырабляе праверку адсутнасці супадальных блокаў вышэй або злева ад таго блока, з якога пачынаецца рахунак, і паведаміць функцыі, што гэты блок з'яўляецца пачаткам лініі.

Першае, што мы дадамо, гэта новы параметр для функцыі CheckMatches. Гэты параметр будзе цэлым лікам, і ён будзе роўны 1 или 0.

Калі параметр роўны 1, ён будзе паказваць на функцыю, якая павінна выканаць праверку, каб пераканацца, што яна глядзіць на пачатковы блок у групе; калі ён роўны 0, ён паказвае функцыі, што ён ужо выканаў гэтую праверку, і можа нармальна працаваць, каб вызначыць, ці з'яўляецца група з трох ці больш блокаў.

Давай зробім гэта

Такім чынам, пачніце з функцыі FindMatches. У гэтай функцыі вы двойчы выклікаеце CheckMatches.  Паколькі гэта першы раз выкліку CheckMatches, вам трэба дадаць новы параметр для кожнага з гэтых выклікаў функцый і ўсталяваць яго ў значэнне 1, каб ён правяраў, ці з'яўляецца блок, на які ён паказвае, пачаткам лініі.

Цяпер функцыя FindMatches павінна выглядаць так, так намалюнку ніжэй.Я пазначыў два змененых ўласцівасці для вашага разумення.

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Цяпер мы паведамляем функцыі CheckMatches, когданужно выканаць новую праверку.  Перайдзіце да функцыі CheckMatches і дадайце новае падзея ў якасці першага падзеі:

Перш чым завяршыць мадыфікацыю функцыі CheckMatches, вам таксама неабходна дадаць аператар Else ў пачатак падзеі для функцыі CheckMatches, і вам трэба дадаць новы параметр пры выкліку функцыі CheckMatches і ўсталяваць яго значэнне на 0.

Новы код функцыі CheckMatches павінен выглядаць так:

Make a Match-3 Puzzle Game in Construct 2: More Swapping, More Points, and More Matching

Падзея, якое мы дадалі, робіць менавіта тое, што я апісаў вышэй. Па-першае, яно глядзіць на блок вышэй або злева ад блока, пачаткоўца лінію.

Калі гэты блок мае той жа колер, што і найбліжэйшы, функцыя нічога не робіць, паколькі ведае, што гэты блок, не з'яўляецца першым блокам у гэтай групе.

З іншага боку, калі колер не супадае, адбываецца выкананне ўмовы аператара Else, і функцыя шукае лінію з трох ці больш блокаў.

Калі вы тэстуеце гульню ў гэты момант і ствараеце групу з больш чым трыма блокамі, вы павінны ўбачыць толькі адзін аб'ект з тэкстам пра колькасць балаў.


Выснова

Цяпер, калі мы скончылі працу над усімі гэтымі функцыямі, і, нарэшце, мы завяршылі нашу сістэму адпаведнасці, мы гатовыя укараніць сістэму руху. Паколькі мы ўжо шмат зрабілі ў гэтым падручніку, і паколькі сістэма руху патрабуе ад нас стварэння некалькіх складаных сістэм, я збіраюся пачакаць выпуску наступнага артыкула. у якой распавяду аб сістэме перамяшчэння.

Калі вы хочаце пачаць працаваць над гэтым ужо зараз, вызначыцеся з некаторымі рэчамі. Відавочна, першае, што вам трэба зрабіць, гэта рэалізаваць непасрэдна перасоўванне.  Для гэтага можна выкарыстоўваць падобную сістэму, якую мы стваралі для адлюстравання колькасці балаў. Падумайце, як вы зменіце хуткасць руху.  Нарэшце,як вы будзеце генераваць новыя лініі для гульца, і як вы даведаецеся, калі менавіта іх трэба ствараць.

Выдаткуйце некаторы час, каб паразважаць над нашай працай, спадзяюся, што ўбачу вас тут на наступным тыдні для наступнай важнай часткі нашага туториала.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.