Velkommen til en ny serie av opplæringsprogrammer hvor jeg skal vise deg hvordan du bygger et Match-3-puslespill fra grunnen av i Construct 2. I denne første delen skal vi legge grunnlaget for spillet og få det grunnleggende puslespillet på skjermen.
Et Match-3-spill er et blokkbasert puslespill hvor du beveger blokker rundt i spillområdet for å lage grupper på tre eller flere som deler et felles attributt (for eksempel en farge eller en form). I de fleste match-3 spill er spilleren også gitt bonuser for å matche mer enn tre blokker samtidig.
De fleste match-3 puslespill er konkurransedyktige i naturen, og spillerenes mål er generelt bare for å få den høyeste poengsummen de kan før tiden går ut, eller en annen tapstilstand er oppfylt. Noen eksempler på match-3-spill inkluderer Pokemon Puzzle League, Bejeweled, og den siste hit Candy Crush Saga.
Jeg bestemte meg for å basere match-3-spillet som vi skal lage på Pokemon Puzzle League:
Hvis du aldri har spilt det før, er PPL en ganske enkel kamp-3 hvor blokker stiger fra bunnen av spillskjermbildet, og spilleren må opprette kamper for å forhindre at spillskjermbildet fylles opp. Hvis blokkene når toppen, mister spilleren og er nødt til å starte om igjen.
Her er en demonstrasjon av spillet vi skal jobbe for i hele serien:
I denne første artikkelen skal vi fokusere på å legge grunnlaget for spillet vårt. Denne artikkelen vil fokusere spesielt på å sette opp prosjektet og gyte et rutenett av tilfeldige blokker for spilleren.
Før du begynner med denne opplæringen, bør du sørge for å installere den nyeste versjonen av Construct 2 (C2). Da jeg bygget den opprinnelige versjonen av spillet, brukte jeg Release 122, så lenge du har en nyere versjon enn det, burde du ha det bra. På toppen av det, hvis du aldri har brukt C2 før du bør sjekke ut denne veiledningen som beskriver grunnleggende om bruk av C2 og hvordan du lager de fleste objekttyper.
Du bør også laste ned grafikkpakken jeg opprettet for denne opplæringen. Selvfølgelig kan du bruke hvilken grafikk du vil, jeg vil gi spesifikk posisjonering for mange elementer i disse opplæringene, og disse stillingene er basert på bildene jeg brukte. Hvis du bruker annen grafikk, må du registrere eventuelle størrelsesforskjeller i grafikken når du følger disse opplæringsprogrammene.
Når du har alt satt opp og har en god forståelse av C2, les videre!
Før vi faktisk bygger hele spillingen, må vi sette opp selve prosjektet. Legg inn C2 og følg disse trinnene:
600x600
.Bakgrunn
, mellomlaget til blokker
, og topplaget til Spillfelt
. GameBG
. Bakgrunn
.650, 650
. GameFieldBorder
.9, -12
.16, 732
.Spillfelt
.GameFieldBorder
gjenstand. 368, -12
.GameFieldBottom
.197, 625
.344, 150
.Spillfelt
.GameFieldBottom
gjenstand. 196, -30
.180
.Det siste vi må gjøre er å lage en bakgrunn for det aktuelle området blokkene vil vises i.
0
, og Alpha til 200
.359, 570
.195294
.Bakgrunn
Spillfeltet er nå fullført, men vi må fortsatt lage en Sprite som kan brukes til blokkene.
Før vi går videre, vil jeg gjerne forklare blokkbildene. Den grå blokken er der for å representere en "inaktiv" blokk, som vil bli implementert i en kommende opplæring. De resterende bildene er gruppert i sett med tre for hver blokk: Den første rammen er for når blokken ikke blir brukt, den andre er for når spilleren manipulerer blokken, og den tredje er for når blokken er tilpasset til en gruppe.
Til slutt tar du blokken vi har laget og legger den et sted i layoutet som forhindrer spilleren i å se det under et aktuelt spill. Still også blokkens størrelse til 40, 40
.
Vi har nå tatt med alle bildene vi trenger for denne artikkelen, og kan fortsette å faktisk gjøre spillet arbeidet.
I den endelige versjonen av spillet vil blokkene bevege seg til alle tider, og nye blokker vil skyve på skjermen fra bunnen. For nå må vi imidlertid få de grunnleggende mekanikene til å fungere, så vi skal bare gyte et 8x8 gitter av blokker og la det være der.
Gå til Event Sheet 1 og legg til disse globale variablene for å definere den første gyteposisjonen til blokkene:
Global Variabel: SPAWNX Verdi = 49 Konstant = True Global Variabel: SPAWNY Verdi = 526 Konstant = Sant
Vi må også gjøre en annen ting før vi gjør den første hendelsen: vi må opprette en instansvariabel for blokken som forteller blokken hvilken farge det er.
Opprett en ny instansvariabel for blokkobjektet, navnet på det Farge
og ikke endre noen andre innstillinger.
Nå skal vi lage vår første begivenhet. Målet med denne hendelsen er å lage et statisk rutenett av blokker for testformål:
Begivenhet: Tilstand: System> Ved start av oppsett Tilstand: System> For Navn: "Y" Start indeks = 0 Sluttindeks = 7 Underhendelse: System> For Navn: "X" Start indeks = 0 Sluttindeks = 7 Handling: System> Lag objektobjekt: Blokk X = (SPAWNX + (loopIndex ("X")) * (Block.Width + 2)) Y = (SPAWNY (loopIndex ("Y")) * (Block.Width + 2) )
Begge disse formlene sier i utgangspunktet det samme. Først legger vi til 2 til blokkbredden slik at hver blokk har en 2px buffer mellom den og naboene for å forhindre falske positive ved bruk av kollisionsdeteksjon. Da multipliserer vi dette nummeret med den nåværende indeksen i forløp, og legger til det i startposisjonen X eller Y. Også, vi trekker fra Y-verdien fordi i C2 er 0-punktet på Y-aksen øverst på spillskjermen, så ved å redusere Y-posisjonens verdi legger vi en gjenstand nærmere toppen av skjermen.
Så hva gjør dette? Dette betyr at når X- og Y-løkkene itererer, og verdiene for X og Y øker, vil plasseringen som setter hver blokk inn, endres, noe som til slutt vil resultere i et firkantet rutenett:
Hvis du kjører spillet på dette punktet, vil du ha et rutenett med blokker - men i stedet for å være forskjellige farger, vil de alle bare sykle gjennom hvert blokkbilde i rekkefølge.
For å fikse dette må vi gjøre to ting.
Først må vi tilordne hver blokk en fargevariant ved hjelp av forekommelsesvariabelen vi laget tidligere. For å gjøre dette, legg til en annen handling:
Handling: Blokk> Angi verdi Farge = gulv (Tilfeldig (1,7))
Dette vil tildele blokken en tilfeldig fargevare fra 1 til 6. (Årsaken til at den ikke er fra 1 til 7 er forklart i forklaringen til Tilfeldig
funksjon.)
Din funksjon bør nå se slik ut:
Vi må også legge til et system som endrer bildet av en blokk basert på verdien. For å gjøre dette, starter du ved å legge til en ny instansvariabel i blokkobjektet:
Instansvariabel for blokknavn: "IsMatched" Type: Boolean initial verdi = false
Legg nå til en ny hendelse:
Begivenhet: System> Alle Tick-handlinger: Blokker> Angi rammeverdi = (Block.Color-1) * 3 + 1
Denne formelen trekker først 1 fra blokkens fargevare for å regne med at verdiene starter ved 1 i stedet for 0. Deretter multipliserer dette tallet med 3 for å regne med at hver blokk har 3 animasjonsrammer. Til slutt legger det til 1 til den verdien siden standardbilde av en blokk er det første bildet i settet med bilder.
La oss se på et raskt eksempel med en blokk som har en fargevalg på 4, for å se hvilken animasjonsramme den skal bruke. Først trekker det 1 fra fargeværdien for å få 3. Deretter multipliserer dette tallet med 3 for å lage 9. Til slutt legger det til 1 til den verdien for å gjøre 10. Dette betyr at en blokk med en fargevalg på 4 vil bruke ramme 10 som standard animasjonsramme, og vil være en lilla / firkantet blokk.
Hvis du kjører spillet ditt nå, vil du se at hver blokk er en annen farge, men vi har fortsatt ikke implementert animasjoner for når musen svever over blokken eller når den passer. Dette vil bli dekket i neste opplæring, sammen med hvordan du bytter to naboblokker.
Her er en liten demonstrasjon av hvordan spillet skal se ut på dette punktet (ta kilden her):
Klikk for å laste demoen.Hvis du vil fortsette å jobbe på egenhånd, må du begynne å se på å endre Blokkens animasjonsramme basert på en "Mus> Markør er over objekt" -hendelse. Du kan også begynne å se på å bruke "Dra og slipp" atferden for å manipulere Blokken, og vurderer hvordan du bestemmer hva spilleren prøver å gjøre med Blokken når de begynner å dra den, eller når de slipper den.
Takk for at du har lest denne delen av opplæringen, der vi satte grunnleggende grunnlaget for vårt Match-3-spill. Kom igjen snart for neste del av serien! Du kan holde deg oppdatert via Facebook, Twitter, Google+, RSS eller e-post.