Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB, VB6: 360* astetta

Sivun loppuun

efteri [29.03.2004 13:33:46]

#

miten saan ukon liikumaan 360* astetta kahdella näpäimellä eli samalla tavalla liikumaan kuin Tk:pelissä eli tapankaikessa??
(ultimate tk:oossa

(vb)

rndprogy [29.03.2004 13:52:16]

#

Enkös jo ircissä kertonut. Sanotaan nyt vielä en ole testannut mutta minun teoriani asiasti on että ukon pixelit tallennataan taulukkoon POINT käskyllä läpikäyden. Ja pisteiden koordinaatit laitetaan

TYPE PISTE
  X AS SINGLE
  Y AS SINGLE
END TYPE

Ja sitten trigonometriset functiot.

efteri [29.03.2004 13:54:57]

#

No mitens se semmonen taulukko tehään?

rndprogy [29.03.2004 14:00:43]

#

no vaikka näin että

for x = 0 to 10
for y = 0 to 10
if point(x, y) <> 0 then a = a + 1
next: next
dim piste(a)

Turambar [29.03.2004 14:00:44]

#

Kannattaakohan ihan peliä lähteä tekemään, jos ei tiedä taulukoista mitään? Noita putkan oppaita saa ja on suotavaa tutkia. Myös Google on kova sana. RTFM!

efteri [29.03.2004 14:01:55]

#

Oon tehny aina eri tavalla mutta tällä kertaa haluun tehä helpomallla

Wukkopi [29.03.2004 17:35:49]

#

No jos nyt haluat sen 360 asteisen käännön voi yksinkertaisesti tehdä vaikka näin:

Dim suunta, ukkokatsoosuuntaanx, ukkokatsoosuuntaany

ukkokatsoosuuntaanx = sin(suunta/360*pi) ''pi = 3.1415927...
ukkokatsoosuuntaany = cos(suunta/360*pi)

'' kääntyminen johonkin näppäin proseduuriin proseduuriin
(suunta = suunta + 1)
(suunta = suunta - 1)

ukkox = ukkox + ukkokatsoosuuntaanx
ukkoy = ukkoy + ukkokatsoosuuntaany

(kirjaston kone pitää lopettaa...)

efteri [29.03.2004 17:37:22]

#

Miten niin pitää lopetaa..???...

hunajavohveli [29.03.2004 20:14:35]

#

Pakko pistää vielä oma. :)

Dim rad = Atn(1) * 4 / 180

x = x + Sin(kulma * rad)
y = y - Cos(kulma * rad)

Noin perin yksinkertaista. Ja tuo radin määrittely generaaliin. Ja nuo x ja y lausekkeet sitten kun haluttaa liikuttaa ukkoa. Kulma on suunta mihin ukko katsoo.

Antti Laaksonen [29.03.2004 20:15:29]

#

Grafiikan nopeuden kannalta olisi varmaan järkevää tallentaa pelihahmon jokainen asento omaksi kuvakseen, koska kulman mukaan kääntäminen on liian hidasta vasta ohjelmassa tehtäväksi. Trigonometrisillä funktioilla (sini ja kosini) sen sijaan kannattaa laskea, kuinka paljon pelihahmo liikkuu x- ja y-suunnassa, kun sen kääntymiskulma on tiedossa.

edit: Suuntia ei kannata tallentaa ohjelmassa asteina, koska silloin ne pitää joka laskussa muuttaa radiaaneiksi, mikä on hidasta.

hunajavohveli [29.03.2004 20:28:00]

#

No sitten vain tehdään niin, että aina kun ukko lähtee liikkumaan, tallennetaan omiin muuttujiien Sinin ja Kosinin arvot joilla x:ää ja y:tä lisätään. Minkähän himputin takia radiaanit ovat vakiona? No jos niitä käytetään, niin koko kehähän eli 360 astetta on silloin 2 * pii. Ja pii saadaan Atn(1) * 4, koska myös arkustangetti palauttaa arvon radiaaneina, ja koska arkustangentti 1 on 45 astetta, niin vastaava tulee ulos radiaaneina ja koska 180 / 45 on 4, kerrotaan neljällä, saadaan puolikehä eli pii.
Kannatti taas selittää... :P

Wukkopi [30.03.2004 10:34:59]

#

Piti lopettaa kun sisko kutsui pois (vartin kone), mutta kuintenkin eli periaate on siis selvä... ja se jako voi olla vaikka 1000 (tarkoittaa, että on 500 eri kulkusuuntaa...)...

Wukkopi [30.03.2004 11:18:32]

#

vai olikohan se kuitenkin 1000 eri kulkusuuntaa...
En muista...

Wukkopi [30.03.2004 11:20:52]

#

hunajavohveli kirjoitti:

Dim rad = Atn(1) * 4 / 180

x = x + Sin(kulma * rad)
y = y - Cos(kulma * rad)

Noin perin yksinkertaista. Ja tuo radin määrittely generaaliin. Ja nuo x ja y lausekkeet sitten kun haluttaa liikuttaa ukkoa. Kulma on suunta mihin ukko katsoo.

Niinhän minä 'periaatteessa' pistinkin...

T.M. [30.03.2004 19:42:18]

#

lainaus:

No mitens se semmonen taulukko tehään?

Suosittelen tuukalle että jättää nämä pelien teot ihan kokonaan pois, ja keskittyy esimerkiksi taulukoihin ja muihin systeemeihin ensiksi (if, for, while, ym silmukat).

Sitten kun tajuaa miten hommat toimii ohjelmoinnissa, voi alkaa aivan itse miettimään erilaisia toteutustapoja.

Älä haukkaa liian isoa palaa kerralla, vaarana tukehtuminen.

hunajavohveli [30.03.2004 19:45:51]

#

Olen kyllä ihan samaa mieltä, että kannattaa ensin opetella tuollaiset perusasiat ja jokaisesta erikseen yksittäisiä esimerkkejä ja sitten pikkuhiljaa alkaa yhdisttelä niitä isoksi kokonaisuudeksi ja tehdä peli.

tuomas [06.04.2004 18:50:19]

#

Yritin saada tuota itselleni toimimaan mutta mikään annetuista vinkeistä ei oikein toiminut..

Tarkoitukseni oli saada picturebox pyörimään.
Olen yrittänyt tuota jo erittäin monella tavalla mutta kun ei toimi niin ei toimi.

Hieman noloahan tämä on mutta voisiko joku antaa suoraan copy & pastettavan koodin?
niin että saisin pictureboxin kääntämisen toimimaan...

peki [06.04.2004 19:47:39]

#

picturebox -komponenttia ei itsessään saa pyörimään ainakaan millään minun tuntemallani keinolla, mutta API -funktioilla onnistuu kyllä kuvan pyöritys. Pictureboxin on oltava vain tarpeeksi suuri.
Miksi haluat käyttää pictureboxia? Voithan aina blitata kuvan suoraan formiin. Käyttää voisit myös DirectDrawia tai Direct3D:tä.
Putkassa on hyvät ohjeet Direct3D:n käyttöön, jos oikein muistan. Sitä kannattaa opetella.

tuomas [07.04.2004 13:43:54]

#

Pelaajan kuva oli tarkoitus olla pictureboxissa.
Jolloin pelin tekeminen helpottuisi.
Mitenkä se pyöritys tehdään sillä apilla?
En löytänyt putkasta direct 3D:tä...

Antti [07.04.2004 14:18:48]

#

Hmm... uskoisin sinun hakevan nyt tätä opasta:
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=2dwdx8

tuomas [07.04.2004 18:00:56]

#

Niin se on directX:ää enkä osaa sitä...
Teen peliä ja kun huomasin että joku kysyi miten saada pelaaja kääntymään 360 astetta kiinnostuin asiasta itsekin..
Tarkoituksena on ollut ladata pelin kenttä taulukkoon.
Nyt haluaisin että pelaaja pystyy kääntymään tuon 360 astetta ja että voisin tehdä törmäystarkastukset helposti tuon taulukon avulla..
Pelaaja itseään nyt ei ole pakko taulukkoon sijoittaa, keksin toisen tavan törmäystarkastuksiin..
Ideana on nyt kuitenkin se että pelaaja voi liikkua 360 eri suuntaan.
Pelaaja voi myös tulla suoraan siihen formille, kertokaa vain miten se onnistuu...

jcd3nton [07.04.2004 19:31:06]

#

Itse käytän DirectX ohjelmassa aliohjelmaa, joka laskee kulmien(1 - 4) koordinaatit (siinä annetaan kulma) ja sitten Direct3D piirtää sen...

thefox [08.04.2004 11:20:34]

#

Käsittääkseni API:sta eikä DirectDraw:sta kummastakaan löydy valmista funktiota kuvan pyörittämiseen. Tuollainen kannattanee siis tehdä itse tai käyttää jotain valmista funktiota tai antaa esim. D3D:n hoitaa homma suoraan kotiin. Oman funktion väsääminen tosin tuskin tässäkään tapauksessa on aloittelijoille kovin helppoa.

tuomas: etsi kartastasi ensimmäinen palikka johon pelaajan osoittamaan suuntaan lähetetty säde törmää, näin saat selville maksimaaliset x- ja y-positiot ja rajoittamalla pelaajan liikkeet näiden alle ei pelaaja voi kulkea seinien läpi. Miten tuollainen sitten toteutetaan riippuu tietysti siitä miten kartta on tallennettu. Aloittelijalle homma voi olla hankalahko (ainakin hyvin toteutettuna).

tuomas [08.04.2004 14:14:04]

#

Putkassa on laaksosen tekemä ohjelma jolla voi pyörittää kuvaa.
Sovelsin ohjelmaa niin että nuolinäppäimistä kuvaa saa pyöritettyä.
Kuva on vain pictureboxissa joten sen liikuttaminen siihen suuntaan johon pelaaja katsoo on ongelmana koska kuva on pictureboxissa.
Miten tuon kuvan saisi formille niin että sitä voisi liikuttaa siinä?

jcd3nton [08.04.2004 15:14:21]

#

fawkz: Miten D3D:llä voi pyörittää yksittäistä kuvaa? En ole löytänyt mitään muuta keinoa kuin oma aliohjelma tähän....

mamaze [08.04.2004 15:39:38]

#

kuinkas onnistuu neljän viivan pyöritys?

siis että neliö neljästä viivasta, VB6:lla.
tarvitseeko paljonkin olio-pohjaista .X1 , .X2 jne jne. koodaamista? vai saisiko trigonometrialla?

jcd3nton [08.04.2004 16:55:34]

#

Neljä muuttujaa, joihin sitten lasketaan trigonometrialla koordinaatit. Kannattaa myöskin olla vaikkapa kuvan keskipiste tallessa. Ittelläni aliohjelmalle annetaan kuvan keskipiste ja sitten kuinka monta astetta sitä pyöritetään.

MakeGho [09.04.2004 03:13:24]

#

Toimii tuo toki noinkin, mutta hyvän tavan mukaista olisi laskea kosinilla x-koordinaatti ja sinillä y-koordinaatti. Kulmalla nolla saadaan näin ollen yksikköympyrässä piste (1,0), ja kulma aukeaa vastapäivään tähän nähden.
Ja hyvät ihmiset, unohtakaa tuo 4*atn(1). Tan(45 astetta) on todellakin yksi, jolloin arkustangentti yhdestä on 45 astetta, ja tämä kerrottuna neljällä on todellakin 180 astetta eli pii. 3.14159 riittänee likiarvoksi aivan hyvin, jos sitä ei ole valmiiksi määriteltynä saatavilla.
Jos joku ei siis vielä ymmärtänyt, 360 astetta vastaa täysin samaa kulmaa kuin 2*pii, (alfa = b/r, eli kulma on kaaren pituus jaettuna säteellä. Koko ympyrän piirin pituus taas on 2*pii*r, jolloin tämä kulma on 360 astetta ja myös 2*pii*r/r, eli 2*pii). 360 astetta on siis 2*pii, jolloin yksi aste vastaa samaa kulmaa kuin 2*pii/360, eli pii/180.

tuomas [13.04.2004 15:37:46]

#

Alkaa olla vähän liian vaikeata minulle.
Saisko zippinä projektia jossa olisi kuva blitattu formille jota voisi pyörittää ja liikuttaa pelaajan katsomaan suuntaan?

tuomas [16.04.2004 19:28:52]

#

Auttakaa nyt edes vähän..
Yritin itse saada tuota näillä edellisillä vinkeillä
mutta en onnistunut.
Lisäksi (uskokaa tai älkää) koodista tuli yli 500 riviä pitkä..

petrinm [16.04.2004 20:08:05]

#

Jos tollasta satut tarkoittamaan!

http://koti.mbnet.fi/petrinm/Car.zip


Sivun alkuun

Vastaus

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

Tietoa sivustosta