Boltaleikir

Bolti á ferð

Draw er í raun lykkja. Í forritinu hér fyrir neðan er bætt við x gildið í hvert skipti sem farið er í gegn um draw. Boltinn er teiknaður í staðsetningunni x og þess vegna er eins og hann færist yfir skjáinn.

Skilyrðissetning snýr boltanum við

Kóðinn hér fyrir neðan gerir nákvæmlega það sama og kóðinn hér fyrir ofan. Eini munurinn er að nú hefur verið búin til breytan xSpeed sem ákvarðar hversu mikið x eykst í hverju skrefi:

Prófaðu að breyta gildinu á xSpeed, áhrifin ættu að vera fyrirsjáanleg.

Prófaðu að breyta xSpeed í neikvætt gildi, t.s. -1. Veltu fyrir þér hvaða áhrif það hefur. Líklega er gott að breyta upphafsstaðsetningunni til að sjá vel hvað gerist.

Láttu boltann byrja á hægri enda skjásins. Athugaðu að þá er eðlilegt að nota breytuna width, en hún er ekki skilgreind fyrr en með CreateCanvas() skipuninni.

Þegar boltinn er á leið til hægri er x að aukast. Þegar boltinn ferðast til vinstri er x að minnka. xSpeed þarf að vera jákvæð tala þegar boltinn er á leið til hægri, en neikvæð tala þegar boltinn er á leið til vinstri. Það getum við gert með því að breyta formerkinu á xSpeed þegar boltinn er kominn út á enda.

Bættu þessum kóða inn í draw() fallið:

//ef boltinn er kominn út á enda hægra megin á hann að snúa við
if(x > width){
  xSpeed = -1*xSpeed;
}

//ef boltinn er kominn út á enda vinstra megin á hann líka að snúa við!
if(x < 0){
  xSpeed = -1*xSpeed;
}
      

Hér er myndbandið "bouncing ball" frá Daniel Shiffman.

Bolti hreyfist í tveimur víddum

Í staðinn fyrir að hafa tvær if setningar, getum við haft eina. Við viljum að boltinn snúi við ef x>width, eða ef x < 0. Þetta má skrifa sem:

      if (x > width || x < 0 ) {
      	xSpeed = xSpeed * -1;
      }
      
Ef við viljum að eitthvað tvennt sé satt skrifum við && (OG) en ef það nægir að annað af tveimur sé satt skrifum við || (EÐA) . Til að boltinn hreyfist í tveimur víddum, þarf að bæta við breytu fyrir y og y-hraða:

Boltinn fær hröðun

Þegar hlutur fellur eykst hraði hans stöðugt á meðan hann er að falla, þar til lokahraða hans er náð. Þessu getum við náð fram með því að bæta við xSpeed í hverju skrefi:

var gravity = 0.15 //þetta fer efst. Passið að hafa punkt en ekki kommu!

ySpeed = ySpeed + gravity; //þessi lína fer inn í draw.
       

Þegar hluturinn er á leið niður verður ySpeed alltaf stærri og stærri tala. Þegar hluturinn er á leið upp er xSpeed neikvætt, en gravity er jákvætt þannig að hluturinn hægir á sér á leið upp. Við gætum líka viljað bæta við kóða þannig að hluturinn skoppi alltaf aðeins lægra í hvert sinn. Ef við margföldum með -0.9 í stað -1 mun hluturinn snúa við á endunum en hægja aðeins á sér við hvert "skopp".