Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tasainen seuraaminen

Sivun loppuun

Gaxx [13.04.2004 17:23:34]

#

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...

hunajavohveli [13.04.2004 17:30:36]

#

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.

Gaxx [13.04.2004 17:46:00]

#

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.

hunajavohveli [13.04.2004 17:59:06]

#

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.

Gaxx [13.04.2004 18:25:43]

#

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ä...

hunajavohveli [13.04.2004 18:30:51]

#

Ohops, tein tosiaan virheen. Eli tuo viimeinen kohta oli väärin. Sen pitää olla:

vihollinenx = vihollinenx + SIN(Angle * rad)
vihollineny = vihollineny - COS(Angle * rad)

Gaxx [13.04.2004 19:03:18]

#

Eiku katos vaa :) Etsin eri kielien laskentavinkkejä ja löysin tällaisen QB osastolta: https://www.ohjelmointiputka.net/koodivinkit/23623-qb-kulman-laskeminen
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.

sooda [14.04.2004 10:14:34]

#

"Gaxx kirjoitti:

Tuli muuten mieleen, että olisko mitään ideaa laittaa sellanen paikka putkaan johon laitettas kaikkee kielestä riippumatonta esim. laskenta juttuja.

Kannatetaan!

hunajavohveli [14.04.2004 14:35:35]

#

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?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta