Come far saltare in aria il motore di fisica Corona SDK parte 1

Panoramica

Tutti amano un buon gioco di fisica, ma ammettiamolo: è molto più divertente quando fai saltare le cose! Questo tutorial ti mostrerà come utilizzare il motore fisico Corona per creare esplosioni nel tuo gioco.

Impostare

Come un po 'di pulizia, iniziamo creando un file build.settings con il seguente codice:

 settings = orientation = default = "landscapeRight", supportato = "landscapeLeft", "landscapeRight"

I dettagli dietro tutte le opzioni per questo file vanno oltre lo scopo di questo tutorial. Le impostazioni di cui sopra forzeranno l'orientamento del dispositivo mobile in modalità orizzontale o orizzontale. Dal momento che abbiamo solo un set di grafici, forzare un orientamento orizzontale manterrà le cose più semplici.

Fisica

Successivamente, inizieremo configurando il nostro motore fisico nel nostro file main.lua:

 fisica locale = require ("fisica") physics.start () display.setStatusBar (display.HiddenStatusBar)

Facile vero? Corona è fantastico! In questa sezione, abbiamo incluso anche una linea per nascondere la barra di stato. Questo ci consente di occupare l'intero schermo del dispositivo mobile senza componenti nativi.

Grafica

Ora che abbiamo le nozioni di base, aggiungiamo uno sfondo bello e centriamo la sua posizione rispetto al centro del dispositivo mobile:

 background locale = display.newImage ("bricks.png", 0, 0, vero) background.x = display.contentWidth / 2 background.y = display.contentHeight / 2

Nel codice precedente stiamo aggiungendo un'immagine di sfondo allo stage con il metodo display.newImage. La sua posizione iniziale nell'angolo in alto a sinistra è 0,0 come indicato dal 2 ° e 3 ° parametro. Per impostazione predefinita, Corona posiziona le immagini con un punto di ancoraggio nel suo centro esatto. Usiamo i metodi x, y sull'oggetto di sfondo per posizionare il punto di ancoraggio dell'immagine nel centro esatto dello schermo.

Prima di aggiungere oggetti dinamici allo schermo, aggiungiamo un piano su cui sedersi:

 local floor = display.newImage ("floor.png", 0, 280, true) physics.addBody (floor, "static", friction = 0.5)

Aggiungiamo un'immagine proprio come abbiamo fatto per lo sfondo, posizionandolo nella parte inferiore dello schermo. L'oggetto piano viene quindi aggiunto allo stage come corpo fisico "statico". "Statico" in questo caso significa che l'oggetto interagirà con altri oggetti fisici sullo schermo ma non sarà influenzato dalla gravità o da eventuali forze inerziali dagli oggetti in movimento.

Oggetti dinamici

Il nostro prossimo passo sarà quello di creare un gruppo di casse impilate in modo precario che aspettano solo di essere cullati:

 casse locali =  per i = 1, 5 fare per j = 1, 5 fare casse [i] = display.newImage ("crate.png", 140 + (i * 50), 220 - (j * 50)) physics.addBody (casse [i], density = 0.2, friction = 0.1, bounce = 0.5) end end

Il codice precedente potrebbe sembrare complesso all'inizio, ma in realtà è molto semplice. Abbiamo due cicli nidificati che attraversiamo per creare un set di casse 5 largo e 5 alto incrementando i valori x e y. Ciascuna di queste casse viene aggiunta al palcoscenico come un corpo "dinamico". "Dinamico", sebbene non specificato nel codice, è il tipo predefinito per tutti i corpi fisici. Abbiamo aggiunto alcuni parametri per determinare il comportamento dell'oggetto quando le forze agiscono su di esso. Il valore di densità per ciascuna cassa sarà importante più tardi quando determineremo la forza della nostra esplosione. Più gli oggetti sono densi, maggiore è la forza necessaria per spostarli. Vuoi provare qualcosa di divertente? Aumentare il valore di rimbalzo a 1.0 e osservare cosa succede alle casse.

Impostare la bomba

Accidenti! Pronto per la parte divertente? Facciamo saltare queste cose. Il principio alla base della creazione di esplosioni è quello di determinare un epicentro dell'esplosione e raggio di esplosione e influenzare tutti gli oggetti che rientrano in esso. Per questo esempio, l'epicentro dell'esplosione sarà determinato da dove tocchiamo lo schermo. Iniziamo aggiungendo questo comportamento:

 local circle = "" funzione locale setBomb (evento) if (event.phase == "started") then circle = display.newCircle (event.x, event.y, 80) circle.myName =? circle? circle: setFillColor (0,0,0, 0) physics.addBody (circle, "static", isSensor = true) circle.collision = cerchio onLocalCollision: addEventListener ("collision", circle) end if (event.phase = = "terminato") quindi circle: removeSelf () end end background: addEventListener ("touch", setBomb)

Qui abbiamo definito un metodo chiamato setBomb che genera un cerchio invisibile con un raggio di 80. Il cerchio è posizionato dove l'utente ha toccato lo schermo. Il corpo fisico che stiamo aggiungendo ha un parametro speciale chiamato isSensor impostato su true. Gli oggetti sensore sono presenti nel motore fisico ma non sono influenzati dalla gravità e non influenzano altri oggetti. In questo caso, stiamo utilizzando un oggetto sensore semplicemente per rilevare quali casse lo stanno contattando. Il contatto sarà determinato ascoltando gli eventi di collisione tra le casse e il nostro sensore. Qualsiasi cassa che si scontra con il nostro sensore si trova all'interno del raggio di esplosione e quindi sarà influenzata dalla forza dell'esplosione.

Kaboom!

Il seguente metodo verrà eseguito al rilevamento della collisione di qualsiasi oggetto con il sensore che abbiamo creato nel codice precedente.

* Come punto di informazione, il seguente metodo deve essere definito nel codice prima del metodo setBomb sopra riportato. Per ragioni di flusso, tuttavia, lo abbiamo inserito più avanti nel tutorial.

 funzione locale onLocalCollision (self, event) if (event.phase == "started" e self.myName == "circle") then forcex locale = event.other.x-self.x local forcey = event.other.y- self.y-20 se (forcex < 0) then forcex = 0-(80 + forcex)-12 else forcex = 80 - forcex+12 end event.other:applyForce( forcex, forcey, self.x, self.y ) end end

L'idea alla base di questo metodo è applicare una forza a qualsiasi oggetto che si è scontrato con il nostro cerchio di sensori. Abbiamo creato due variabili chiamate forcex e forcey. Usiamo la distanza dal centro della cassa al centro del nostro cerchio del sensore per determinare la forza della forza che applicheremo. In questo modo, creiamo il modo di un uomo povero di diminuire la forza dell'esplosione più l'oggetto è dall'epicentro dell'esplosione. Tutti questi numeri dipendono fortemente dalle proprietà fisiche degli oggetti che stiamo esplodendo.

* Nota: le forze come valori numerici sono molto più alte della densità, dell'attrito e delle proprietà di rimbalzo degli oggetti. Sentiti libero di giocare con questi valori per ottenere risultati interessanti!

Conclusione

E lì ce l'abbiamo. Questo tutorial dovrebbe fornire un eccellente punto di partenza per creare tutti i tipi di giochi interessanti che coinvolgono le esplosioni. Prenditi del tempo per sperimentare le proprietà e i valori di tutte le variabili in questo esercizio.

Nella parte II di questo tutorial aggiungeremo alcune campane e fischi extra alla struttura dell'esplosione per renderla ancora più distruttiva!

Lascia dei commenti e fammi sapere cosa pensi della Parte I.