Kun yhdestä päästään niin seuraavaan törmätään :P Eli tämänkertainen ongelma on hidastuva seuraaminen vaikka sen pitäisi olla tasaista.
Minulla siis on koodi:
vihollinenx = vihollinenx + (scrollx - vihollinenx) / 10 vihollineny = vihollineny + (scrolly - vihollineny) / 10
Tuolla koodilla vihollinen kulkee pelaajaa(scroll) kohti sulavasti, mutta ongelmana on, että mitä kauempana vihollinen on pelaajasta, sitä nopeampaa se lähestyy pelaajaa ja mitä lähempänä vihollinen on pelaajaa, sitä hitaampaa vihollinen lähestyy. Kaikki tämä johtuu siis tuosta 10:llä jakamisesta. Tässä on asian ydin eli millä tuo lauseke pitäisi jakaa tuon 10:en sijasta, jotta vihollisen lähestyminen olisi tasaista?
Tosin en ole kyllä varma, että pystyykö tuota edes toteuttamaan tuolla tavalla eli, jos ei pysty toteuttaman niin muut tavat tai jos on muuten vain parempia ja nopeampia tapoja toteuttaa tuo kyseinen homma niin kyllä nekin tietysti käy.
edit: typoja typoja...
Tähän keksin itse kerran tällaisen ratkaisun ja se toimii mielestäni hyvin:
vihollisennopeus = 3 vihollinenx = vihollinenx + SGN(scrollx - vihollinenx) * vihollisennopeus vihollineny = vihollineny + SGN(scrolly - vihollineny) * vihollisennopeus
SGN siis muuntaa positiivisen luvun 1:ksi, negatiivisen -1:seksi ja nollan se pitää nollana.
Edit: Ja sitten muuten, mikäli aiot tehdä vihulaisia enemmänkin niin pistä toki taulukoon. Kerran tein itse tavallisilla muuttujilla tuollaisen kaikkien törmäykset ja putoamiset ja sitten oli hauska muuttaa taulukoiksi, kun pitikin tehdä toinen samanlainen.
Tuollainen se oli minullakin aluksi, mutta tuo ei minusta ole kovin hyvä, sillä se ei tule suoraan kohti. Eli haluaisin sellaisen mikä tulee suoraan kohti eikä että seuraa vain 8:n suunnan avulla.
edit:
lainaus:
Ja sitten muuten, mikäli aiot tehdä vihulaisia enemmänkin niin pistä toki taulukoon. Kerran tein itse tavallisilla muuttujilla tuollaisen kaikkien törmäykset ja putoamiset ja sitten oli hauska muuttaa taulukoiksi, kun pitikin tehdä toinen samanlainen.
On ne mulla taulukossa mutta pistin ihan vain selkeyden vuoksi tänne yksittäisillä muuttujilla.
No jos haluat kaikki suunnat peliin, on syytä laskea kuinka monen asteen suunataan vihollisen tulisi kulkea. Asteet saat selville laskemalla vihollisen ja pelaajan välisen kulman.
Tähän käytetään trigonometriaa. Tässä kehittämäni koodi, joka laskee kulman arkustangentilla:
DIM rad FUNCTION Kulma (x, y, x2, y2) rad = ATN(1) * 4 / 180 'tämä on parasta laittaa formin loadiin a = x2 - x b = y2 - y IF a <> 0 AND b <> 0 THEN k = ATN(b / a) / rad l = 180 IF y < y2 THEN l = 0 IF y = y2 THEN l = 0 k = k + l IF k > 0 THEN k = k + 90 IF k > 180 AND k < 270 THEN k = k - 180 ELSE k = k + 270 END IF ELSE IF a = 0 AND b < 0 THEN k = 0 IF b = 0 AND a > 0 THEN k = 90 IF a = 0 AND b > 0 THEN k = 180 IF b = 0 AND a < 0 THEN k = 270 END IF Kulma = k END FUNCTION
Kutsut sitä vaikka näin:
Angle = Kulma(vihollinenx, vihollineny, scrollx, scrolly)
Ja sitten:
vihollinenx = vihollinenx + SIN(kulma * rad) vihollineny = vihollineny - COS(kulma * rad)
Ja kannattanee vaihtaa Twipit Pixeleiksi ellet ole sitä jo tehnyt.
Ja tuo radiaanien muuntaminen asteiksi (rad-muuttuja) voi olla aika hidasta. Sen voisi oikeastaan jättää pois mutta sitten nuo vakioasteet, eli 90, 180 ja 270 täytyisi muuttaa myös radiaaneiksi eli pii/2, pii, pii*1.5.
TÄH?? Pitäisikö tuon Angle:n olla kulma tjs.? Jos pitäisi, niin eihän tuo tule suoraan kohti. Jos taas ei, niin miten tuo sitten toimii? Ei käsitä...
Ohops, tein tosiaan virheen. Eli tuo viimeinen kohta oli väärin. Sen pitää olla:
vihollinenx = vihollinenx + SIN(Angle * rad) vihollineny = vihollineny - COS(Angle * rad)
Eiku katos vaa :) Etsin eri kielien laskentavinkkejä ja löysin tällaisen QB osastolta: https://www.ohjelmointiputka.net/koodivinkit/
Tuo ajaa jotakuinkin saman asian(jos nyt ymmärsin oikein), mutta lyhyemmässä muodossa. Eli ongelma oli aluksi siinä, etten laittanut vihollisen nopeuskerrointa, koska ajattelin, ettei sillä ole merkitystä, mutta kun sitten en muuta keksinyt niin laitoin sen ja THADAAAA!, se toimi!
Kiitoksia, sain ratkaisun ongelmani.
Eli siis koodissasi ei ollut muuta vikaa kuin, että siitä puuttu nopeuskertoimet :) Sit se toimi kuin unelma.
Edit: Tuli muuten mieleen, että olisko mitään ideaa laittaa sellanen paikka putkaan johon laitettas kaikkee kielestä riippumatonta esim. laskenta juttuja.
"Gaxx kirjoitti:
Tuli muuten mieleen, että olisko mitään ideaa laittaa sellanen paikka putkaan johon laitettas kaikkee kielestä riippumatonta esim. laskenta juttuja.
Kannatetaan!
Gaxx kirjoitti:
Tuli muuten mieleen, että olisko mitään ideaa laittaa sellanen paikka putkaan johon laitettas kaikkee kielestä riippumatonta esim. laskenta juttuja.
Voisikohan tämän jotenkin liittää jokin aika sitten kaavailtuun ATK/Matemaatiikka-osioon, jos sellainen nyt tulee?
Aihe on jo aika vanha, joten et voi enää vastata siihen.