miten saan ukon liikumaan 360* astetta kahdella näpäimellä eli samalla tavalla liikumaan kuin Tk:pelissä eli tapankaikessa??
(ultimate tk:oossa
(vb)
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.
No mitens se semmonen taulukko tehään?
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)
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!
Oon tehny aina eri tavalla mutta tällä kertaa haluun tehä helpomallla
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...)
Miten niin pitää lopetaa..???...
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.
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.
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
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...)...
vai olikohan se kuitenkin 1000 eri kulkusuuntaa...
En muista...
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...
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.
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.
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...
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.
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ä...
Hmm... uskoisin sinun hakevan nyt tätä opasta:
https://www.ohjelmointiputka.net/oppaat/opas.
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...
Itse käytän DirectX ohjelmassa aliohjelmaa, joka laskee kulmien(1 - 4) koordinaatit (siinä annetaan kulma) ja sitten Direct3D piirtää sen...
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).
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ä?
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....
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?
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.
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.
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?
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ä..
Jos tollasta satut tarkoittamaan!
Aihe on jo aika vanha, joten et voi enää vastata siihen.