Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Asteet X ja Y koordinaateiksi

Sivun loppuun

Lumi-ukkeli [27.02.2005 12:21:13]

#

Kun tekisin autopelin, missä voi ajaa autolla eri suuntiin
näytöllä niin, että se kääntyy, eli auton kulma ilmoitetaan asteina. Mitenkähän voisi laskea, että jos tiedän:

X-sijainnin
Y-sijainnin
auton nopeuden
auton kulman

Niin mitenkähän voi laskea auton seuraavan sijannin X ja Y-koordinaatit?

Voisin vaikka vannoa, että tarvitaan pii:tä?

Gaxx [27.02.2005 13:20:45]

#

auto.x = auto.x + Sin(kulma_radiaaneina) * nopeus
auto.y = auto.y + Cos(kulma_radiaaneina) * nopeus

Lumi-ukkeli kirjoitti:

Voisin vaikka vannoa, että tarvitaan pii:tä?

Vain, jos sinun tarvitse muuttaa asteet radiaaneiksi:

rad = asteet * PII / 180

setä [27.02.2005 16:53:45]

#

Ei tarvi piitä kun käyttää koota (k = Atn(1)/45). rad = asteet * k :)

Gaxx [27.02.2005 17:55:07]

#

No voi jes :)

rad = asteet * PII / 180
rad = asteet * Atn(1) * 4 / 180
rad = asteet * Atn(1) / 45
...

Eikö se nyt ole melkein yksi ja sama mitä noista muodoista käyttää? :)

setä [27.02.2005 20:10:21]

#

Heh, tarkoitettu enempi vitsiksi kuin saivarteluksi. Jos muunnosta tarvii vain kerran, sama kuinka sen muotoilee. Mutta jos useammin, niin kannattaa kerroin laskettaa valmiiksi Form_Load-tapahtumassa. Koodi lyhenee ja kirjoitusaika lyhenee. :)

Lumi-ukkeli [27.02.2005 20:36:41]

#

Taas sain sekavia vastauksia ja sain myös aikaan tappelua.
Meneekö suoraan metsään, jos laitan näin?:

kulma_radiaaneina = asteet * 3.141592 / 180
auto.x = auto.x + Sin(kulma_radiaaneina) * nopeus
auto.y = auto.y + Cos(kulma_radiaaneina) * nopeus

Metabolix [27.02.2005 20:56:58]

#

Ihan oikein teit.

Hyvä kääntäjähän laskee tuon (pii / 180) valmiiksi ja jättää siihen vain k:n.

Pieni optimointi olisi vielä semmoinen, että laskisi Sinin ja Cosinin valmiiksi muuttujiin aina, kun auto kääntyy, ja sitten käyttäisi vain näitä muuttujia. Pitkän suoran aikana on aika turhaa laskea uudestaan sinejä ja kosineja, kun ne ovat kuitenkin samat. Vaikka mitäpä tuo nykykoneilla enää merkitsee...

setä [27.02.2005 21:05:19]

#

Mitä missä tapellaan?? No vitsit sikseen. Oikeastaan kuljettu matka lasketaan kaavasta s = v*t eli tuossa kaavassa pitäisi vielä olla kertoimena aikaväli. Miten tuo nopeus on ilmaistu? Jos se on esim. km/h, tarvitset kertoimen jolla muutat nopeuden kuvaruudulle sopivaksi ja sitten vielä tämä aikaväli. Nämä kaikki voidaan sisällyttää kyllä nopeuteen suoraan, jos sille annetaan sopiva arvo. Jos kuitenkin nopeus halutaan näyttää ruudulla yksiköissä km/h, tarvitset tuon skaalauskertoimen.

Lumi-ukkeli [27.02.2005 21:12:12]

#

Kukapa haluaa tietää, että kuinka lujaa ne pikselit kulkee siinä näytöllä. 8}

setä [27.02.2005 22:34:19]

#

Eihän pikselit minnekkään kulje paitsi jos potkit näytön pellolle. Autopeleissä on tavallisesti nopeusnäyttö (km/h). Jotta auto liikkuu ruudulla sopivaa vauhtia, on tämä arvo skaalattava ylempänä olevaan kaavaan sopivaksi.D

Lumi-ukkeli [28.02.2005 07:50:06]

#

Joo mutta en oo vielä niin pitkällä että tarttisin semmosta.
Suurempi onkkelma on että miten kääntää sitä autoa?

Ajattelin näin aluksi tehä paintilla auton vaikka 8 eri asentoon ja sitten piirrellä niitä, mutta silloin kääntyminen täytyy tapahtua 360/8(=45) asteen välein .

Kokeilin tässä jotakin kuvan kääntöjuttua koodivinkeistä, mutta siinä koko kierrokseen pitää asteita laittaa yli 500 ja
siitä kuvasta tulee ihan kiero kun sitä on yhden kierroksen kääntänyt.

Onkohan suuri moka tehdä näin aluksi BitBlt:llä, ja sitten
kun alkaa olemaan siinä vaiheessa, että ei enään riitä, niin
sitten kääntää DirectX:lle?

Metabolix [28.02.2005 08:02:55]

#

Lumi-ukkeli kirjoitti:

Onkohan suuri moka tehdä näin aluksi BitBlt:llä, ja sitten kun alkaa olemaan siinä vaiheessa, että ei enään riitä, niin sitten kääntää DirectX:lle?

On ja ei. Sikäli on, että valmista koodia on ikävä muokkailla, ja kun tilanne on se, että DirectX:ään joudutaan lopulta kuitenkin, niin turha siinä on muuta viritellä. Sikäli taas ei, että koska BitBlt ei riitä mihinkään, joudut kuitenkin heti siirtymään DirectX:ään :)

Teet vaan heti DirectX:lle, pääset helpommalla. (OpenGL ei myöskään olisi paha.) DirectX:ssä et tarvitse kuin sen yhden kuvan, kun sitä voi kääntää helposti juuri sinne, minne haluaa.

Lumi-ukkeli [28.02.2005 08:21:01]

#

Joo kyllä muuten, mutta tämä mun DirectX osaaminen ei oo mitenkään mahtavaa, eli kuvan kääntämiseen menee vielä aikaa.

Omistan muuten yhden DirectX7 -kirjan joka on onneksi suomeksi mutta opetusmateriaalina käytetään C++, josta en osaa paljon minkään vertaa.


Voikohan OpenGL:ää ja DirectX:ää käyttää yhtäaikaa?

Lumi-ukkeli [28.02.2005 15:57:03]

#

'Kuvaa voi pyörittää seuraavia arvoja muokkaamalla
'Piirrämme kuvan nyt kuitenkin suorassa
RotationCenter.X = 0.5
RotationCenter.Y = 0.5
Rotation = 0

Mitenkä näitä arvoja tulisi muutella (DX8-oppaasta), että kuva kääntyisi esimerkiksi 90 astetta vasemmalle?

tuomas [28.02.2005 16:10:28]

#

oiskohan että rotation = 90 :)?

Metabolix [28.02.2005 16:24:48]

#

Taitaisi itse asiassa olla, että Rotation = (Pii / 2), koska DirectX käyttää radiaaneja. Ellei sitä arvoa sitten myöhemmin muunneta radiaaneiksi jossakin. (Radiaanit = Asteet / 180 * Pii)

Lumi-ukkeli [28.02.2005 16:28:33]

#

Mitä nuo RotationCenterit tekee?

Metabolix [28.02.2005 16:32:40]

#

Ne ovat X- ja Y-koordinaatit sille kuvan pisteelle, jonka ympäri kuvaa pyöritetään. Kannattaa laittaa aluksi jonnekin kuvan keskelle.

Lumi-ukkeli [28.02.2005 17:30:37]

#

Hankala tuota hommailla kun se kuva katoaa niin nopeasti näkyvistä.

tesmu [28.02.2005 18:33:47]

#

Olisiko tuosta meitzin kirjottamasta pelimoottorista apua

https://www.ohjelmointiputka.net/koodivinkit/24367-vb6-reaaliaikainen-moottori-peliin

nomic [01.03.2005 02:07:20]

#

Private Type koord
    x As Single
    y As Single
End Type

Const maksiminopeus = 100 'vakio

Dim nopeus As Single 'muuttujia
Dim asteet As Single
Dim liikummeko As Boolean
Dim suunta As String

Dim auto As koord

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then 'jos painetaan ylös
        liikummeko = True 'muutetaan arvo 'trueksi'
    ElseIf KeyCode = vbKeyLeft Then 'jos painetaan vasemmalle
        suunta = "vasen" 'annetaan arvo
    ElseIf KeyCode = vbKeyRight Then 'jne...
        suunta = "oikea"
    ElseIf KeyCode = vbKeyEscape Then 'painetaas escia
        End 'lopetetaan koko roska
    End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyUp Then 'kun ylös näyttävä nuolinäppäin ei ookkaan enään pohjassa
        liikummeko = False 'muutetaas arvo falseksi! HÄHÄ! :D
    ElseIf KeyCode = vbKeyLeft Or KeyCode = vbKeyRight Then 'kun päästetää tästä irti
        suunta = "" 'otetaan arvot veks/vaihdetaan
    End If
End Sub

Private Sub Form_Load()
    Me.KeyPreview = True
    Me.ScaleMode = 3
End Sub

Private Sub Timer1_Timer()
    If liikummeko = True Then 'nappi pohjassa
        If nopeus < maksiminopeus Then 'jos nopeus on vähemmän kuin maksimi
            nopeus = nopeus + 0.1 'silloin voidaan huoleti lisätä
        End If
    Else 'jos nappi ei ookkaan enään pohjassa
        If nopeus >= 0.05 Then 'ja nopeus on kummiskin enemmän kuin 0
            nopeus = nopeus - 0.05 'miinustetaas siitä
        End If
    End If

        If suunta = "vasen" Then 'jos ehto on tosi
            asteet = asteet + 0.1 'väännetään arvoja
        ElseIf suunta = "oikea" Then
            asteet = asteet - 0.1
        End If
    'auton uus paikka on x = x + muuttuva luku
    auto.x = auto.x + Sin(asteet) * nopeus
    auto.y = auto.y + Cos(asteet) * nopeus
    'asetetaas oikeet koordinaatit picture1boksille
    Picture1.Left = auto.x
    Picture1.Top = auto.y
End Sub

Tossa pieni esimerkki. Mitään virheenkorjausta ei ole, ja esimerkki ei varmaankaan edes toimi kunnolla. [en ehtinyt kokeilla] :D
Mutta tarvii Form1:lle: Timer1 [intervalliksi joku 10] ja sitten Picture1.

Ja on kuvan pyörittämiseen muukin mahdollisuus, kuin tuo dx8:ia hyödyntäen [mikä ei ole yhtään huono asia, sinänsä ^^]. esimerkiksi koodivinkeistä löytyy yksi tapa jota ite kokeilin omaan rallipeliin, tapa oli melko hyvä[parempi kuin omani], minun tapani hyödyntää sitä oli huono. :)

Lumi-ukkeli [01.03.2005 18:03:20]

#

Toi mun auto pyörii aivan miten sattuu, ja ilmeinen syy on tuo pyörityksen keskipiste, eli miten sen saa sen objektin (eli auton) keskelle?

Metabolix [01.03.2005 21:23:04]

#

No kai tiedät, mikä on pikseli? Olet varmaan itse tehnyt sen auton kuvan, joten tiedät varmaan, montako pikseliä sen leveys on? Katso, mitkä ovat keskikohdan koordinaatit, ja laita ne tuohon.

nomic kirjoitti:

Ja on kuvan pyörittämiseen muukin mahdollisuus, kuin tuo dx8:ia hyödyntäen

Niin, kuten DX9 :)
OpenGL on myös kiva.

Ja hyihyihyi, ei saa käyttää timeriä reaaliaikaisen pelin ajastukseen.

Lumi-ukkeli [01.03.2005 21:28:24]

#

Joo mutta miten ne autot sitten saa liikkumaan täsmälleen yhtä lujaa riippumatta koneen tehoista/nopeudesta lukuunottamatta sitä, että kone olisi niin hidas ettei jaksaisi pyörittää peliä?

nomic [01.03.2005 21:34:37]

#

Metabolix kirjoitti:

No kai tiedät, mikä on pikseli? Olet varmaan itse tehnyt sen auton kuvan, joten tiedät varmaan, montako pikseliä sen leveys on? Katso, mitkä ovat keskikohdan koordinaatit, ja laita ne tuohon.

nomic kirjoitti:

Ja on kuvan pyörittämiseen muukin mahdollisuus, kuin tuo dx8:ia hyödyntäen

Niin, kuten DX9 :)
OpenGL on myös kiva.

Ja hyihyihyi, ei saa käyttää timeriä reaaliaikaisen pelin ajastukseen.

:D
Pahoitteluni. Olin vähän koomassa/unessa/jossain kun tota kirjoittelin. :)

Opengl on lähempänä mun syräntä kuin dx.

Sitäpaitsi, kirjoitin edelliseen viestiin, että toi on vain esimerkki, kasasin koko roskan "siirtelyn" ympärille, jotta helposti ymmärtää mitä tapahtuu missäkin. en viiti alkaa sotkea tähän mukaan mitään apia jne... tai voisin tietysti, mutta sekoittaakohan se liikaa vinkin alkuperäistä ideaa?

Metabolix [02.03.2005 06:53:40]

#

Lumi-ukkeli kirjoitti:

Joo mutta miten ne autot sitten saa liikkumaan täsmälleen yhtä lujaa riippumatta koneen tehoista/nopeudesta lukuunottamatta sitä, että kone olisi niin hidas ettei jaksaisi pyörittää peliä?

Älä ikinä käytä timeria tuollaiseen!
Laske edellisestä siirrosta kulunut aika ja kerro liikemäärä sillä. Eli jos on liikuttu 2 sekuntia, niin liikut 2x niin paljon kuin sekuntissa. Tutustu funktioon GetTickCount (tai timeGetTime ja tarvittaessa timeBeginPeriod ja timeEndPeriod). Google tai MSDN auttaa.

Lumi-ukkeli [03.03.2005 15:18:24]

#

Gaxx kirjoitti:

auto.x = auto.x + Sin(kulma_radiaaneina) * nopeus
auto.y = auto.y + Cos(kulma_radiaaneina) * nopeus

Tuossa on se vika, että auto liikkuu kulmaa päin mennessä nopeampaa kuin suoraan sivulle.

Lumi-ukkeli [03.03.2005 17:59:48]

#

Eipäs olekkaan, oma virheeni.

Asiasta toiseen: Miten sais ensinnäkin jonkun kuvan taustakuvaksi?

Olisko mahdollista, että tekisi kentan vaikka 32 * 32 pikselin palasista, mutta auton kuitenkin liikkumaan sulavasti?

Elikkä oon kopioinu tuon DirectX8 2D:tä oppaasta koodin, ja muokannut
sitä omaan tarkoitukseen sopivaksi.

Puhveli [03.03.2005 18:06:23]

#

Form tai PictureBox.Picture = LoadPicture("sejase.bmp/.jpg/.gif/.ico/.cur"). Jos tahdot tilettää kuvan, joudut tekemään sen koodin kautta, mutta se ei ole vaikeaa. Kun olet tilettänyt (jos tiletät), laita Form tai PictureBox.Picture = Form tai PictureBox.Image
Ja voit kyllä tehdä kentän pikkupaloista, tee ensin tilesettibittikartta ja katso putkan vepukkapeliohjelmointiopas https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=vbp_2.

Lumi-ukkeli [03.03.2005 18:17:16]

#

DirectX värittää tuon taustan mustaksi (näin se on oletuksena kun kopioin sen siitä oppaasta).

Pitäisiko sen tausta piirtää tekstuurina ennen auton piirtoa?

tuomas [03.03.2005 18:33:28]

#

No luot uuden rectin taustaa varten, piirrät sen ja sen jälkeen pelaajan + kaiken muun.

Lumi-ukkeli [03.03.2005 18:46:48]

#

Voitko antaa lyhyen esimerkin miten...?

Blaze [03.03.2005 18:51:18]

#

Lumi-ukkeli kirjoitti:

Pitäisiko sen tausta piirtää tekstuurina ennen auton piirtoa?

Kyllä. Jos tasavärinen tausta kelpaa, niin vois vaihtaa sitä d3ddevice.clear:lle annettavaa väriarvoa.

Lumi-ukkeli [03.03.2005 20:36:25]

#

Juu niin kokeilinkin, mutta tarkoitus olisi saada jonkunlainen kuva taustalle ensin ja jos se onnistuu, niin sitten alkaa niitä tilejä sinne taustalle laittamaan. Tarvitsisin hieman koodiesimerkkiä, koska DirectX ei ole vahvimpia alueitani (ainakaan vielä...)

Blaze [03.03.2005 21:05:28]

#

No oppaan pohjalta sun pitäis osata piirtää kuva näytölle. Teet vaan kuvan, joka on koko näytön kokonen ja piirrät sen näytön kokosena ruudulle.

Lumi-ukkeli [04.03.2005 08:01:16]

#

Eli tuleeko se jotenkin näin?

BeginScene
Begin
Draw Tausta
Draw Auto
End
End Scene

Blaze [04.03.2005 12:52:02]

#

Juurikin noin.

Lumi-ukkeli [04.03.2005 20:19:39]

#

Ei auta, peli vilkkuu ihan mahdottomasti ja autosta jää jälki
tai sitten ei tapahdu mitään tai tausta ei piirry...

Missä järjestyksessä se tausta oikein pitäisi piirtää?

eraggo [08.03.2005 06:26:41]

#

tiedän tunteen.... siirä taustakuvan lataus form_load tapahtumaan niin enää ei välky:)))

Lumi-ukkeli [13.03.2005 21:18:34]

#

eraggo ei toimi tolleen, tosin sain sen jo toimimaan.

Elikkä tässäpä miten sen tein:

Tehdään kaksi tekstuuria, auto ja tausta.
Loopissa piirretään ensin tausta. Kun käytetään putkan
dx8-opasta pohjana piirtoon tulee tehdä muutoksia:
rivi

D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0

kommentoidaan pois.
Auton piirrossa kommentoidaan rivi

D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#,

pois.

Lumi-ukkeli [15.03.2005 12:12:39]

#

Siis eli tuo ylempi poiskommentointi siis taustan kohdalla.


Asiasta toiseen:

Tiedättekö mitään hyviä 2D-auton fysiikka TUTseja tms.?
Onkohan kukaan kenties suunnitellut semmoisen oppaan tekoa putkaan...?

Lumi-ukkeli [18.03.2005 15:18:38]

#

Mitä kannattaisi tehdä windowsin kursorille kun peli toimii kokonäyttö-tilassa ja kursori on vain tiellä (=ei tarvita)?

Blaze [20.03.2005 20:03:23]

#

http://www.mentalis.org/apilist/ShowCursor.shtml

Metabolix [20.03.2005 20:08:13]

#

Taikka sitten DirectX:n oma kursorinpiilotusfunktio. Oikeastaan kaikkein fiksuin tapa taitaisi olla se, että määritetään kursoriksi kokonaan läpinäkyvä kursori (kai VB:ssä on kursorieditori), ja sitten kun kursoria mahdollisesti kaivataan (vaikkapa menussa), voidaan sellainen piirtää ruudulle ihan itse samalla tavalla kuin muutkin kuvat. Samalla saadaan hieman lisää vapauksia kursorin koon, värityksen ja erikoisefektien suhteen.

Lumi-ukkeli [21.03.2005 17:33:24]

#

Joo näyttäis toimivan.

Teenpä nyt huvikseen tuohon auton perään peräkärryn ja siihen
tarvin tuon aiheen (asteet koordinaateiksi) vastakkaisena, eli
mitenkäs saisi x ja y koordinaateista asteita?

Lumi-ukkeli [22.03.2005 16:23:57]

#

Itse laskisin matikan tunnilla tuon varmaan sinillä kosinilla tai tangentilla (en kyllä muista millä niistä), muttakun nuo VB:n funktiot toimivat vähän erillä tavalla...eli voisko joku kertoa miten tulisi ratkaista tai edes heittää linkki jonnekkin mistä tuohon löytyisi ratkaisu?

...ja se ongelma oli että miten lasketaan asteet, koska
pitäisi sitä peräkärryä kääntää suhteessa vetokoukkuun (eli vetokoukun sijainti ja peräkärryn sijainti tiedossa->tarvitaan asteita)?

Lumi-ukkeli [22.03.2005 17:31:31]

#

Exceliinkin saa tämmöisen:
Karttafunktioita

Bearing
Suuntima, eli kulkusuunta paikasta A paikkaan B. Koordinaatit annetaan desimaaliasteina väleissä puolipiste. Tulos on asteina myötäpäivään pohjoisesta.

Syntaksi:
Bearing(latitudiA ; longitudiA ; latitudiB ; longitudiB)
Esimerkki:
Bearing(60,85621;24,53784;60,91284;24,59522)
Tulos:
26,22°

Niin miksei vb:ssäkin olisi jotakin vastaavanlaista vai voiko sen peräti laskea itse?

hunajavohveli [22.03.2005 18:02:43]

#

Arkustangentilla onnistuu. Ajattelet koko homman vain suorakulmaisena kolmiona. X- ja y-matkat ovat kateetit ja kuljettava matka on hypotenuusa.

Tan Kulma = y/x

josta seuraa

Kulma = Atan (y/x)

Joudut tosin lopuksi tarkistamaan x:n ja y:n etumerkit ja kasvattamaan saatua kulmaa niiden mukaan. Myös tasa-asteet 0, 90, 180 ja 270 on hyvä tehdä erikseen, ettei tule nollalla jakamisia yms.

Edit: Tämä on eräästä koodivinkistäni. Toimii, mutta onnistuisi varmaan vähemmälläkin koodilla. A:n arvoksi annat x:ien erotuksen ja B:n arvoksi y:iden erotuksen. En tosin muista kummasta vähennetään kumpi... kokeile. :)

Function Kulma(a As Single, b As Single)
Dim k As Single, l As Integer
Dim Y As Single, Y2 As Single

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 = 180
  If b = 0 And a > 0 Then k = 270
  If a = 0 And b > 0 Then k = 0
  If b = 0 And a < 0 Then k = 90
End If

If k > 180 Then k = k - 360
Kulma = k + 180

End Function

Lumi-ukkeli [22.03.2005 18:05:59]

#

ELi pitääkö nuo kumpikin laskea vai tuo jälkimmäinen?

hunajavohveli [22.03.2005 18:08:23]

#

Tuo funktio palauttaa asteina, kunhan määrittele radiaanikertoimen (rad), eli sen pitää olla Pii/180. Ja koska arkustangentti palauttaa radiaaneina, niistä saa kätevästi piin:

Rad = Atn(1) * 4 / 180

Edit: Tuo koodi on siis esimerkki siitä, mitä selitin sitä ennen.

Lumi-ukkeli [22.03.2005 18:15:11]

#

joo huomasin, mutta sama asiahan se on kuin pii / 180
Hyvin toimii

Vohveli laitan sun nimimerkin krediitteihin jos muistan ja jos tuo nyt edes menee jakoon tuo mun "peli"

Lumi-ukkeli [23.03.2005 08:14:46]

#

Nii ja iha tiedoksi että tulossa olis jonkulainen TractorPulling-peli...

Ideoita?

Lumi-ukkeli [24.03.2005 14:19:30]

#

Eipä toimi tuo aivan täydellisesti tuo hunajavohvelin kulmalaskin, tosin siinä ei ollut isoja virheitä. Tämän pitäisi toimia moitteetta (itse tein):

Private Function Kulma(x As Single, y As Single)
If x <> 0 And y <> 0 Then

If x > 0 Then
Kulma = Atn(y / x) / rad + 270
Else
Kulma = Atn(y / x) / rad + 90
End If

Else
If x = 0 And y = 0 Then Kulma = 0
If x = 0 And y > 0 Then Kulma = 0
If x = 0 And y < 0 Then Kulma = 180
If y = 0 And x < 0 Then Kulma = 90
If y = 0 And x > 0 Then Kulma = 270
End If
End Function

Tuollapa on vähän arvoitusrivi tuo x = 0 ja y = 0

hunajavohveli [24.03.2005 14:39:25]

#

Lumi-ukkeli kirjoitti:

Eipä toimi tuo aivan täydellisesti tuo hunajavohvelin kulmalaskin

Joo, no kun nyt tarkemmin katson, niin tuota olikin sovellettu vähän enemmän sopimaan siihen koodivinkkiin, joten ei ihmekään, jos ei aivan toimi.

Lumi-ukkeli [24.03.2005 16:13:34]

#

Paljonkohan on asteita silloinkun x = 0 ja y = 0?
Tuossa mun esimerkissä on 0

hunajavohveli [24.03.2005 17:17:06]

#

Silloin se on yksi ja sama piste eikä muodostu suoraa, jota voisi verrata y-akseli -suoraan. Ja yhdellä suoralla ei saa aikaan kulmaa ollenkaan. Tuo nolla lienee järkevin palautus.

Lumi-ukkeli [24.03.2005 18:50:13]

#

Pääsisköhän tuo koodivinkkeihin?
Ja tämä kans:

Private Function etaisyys(x1 as single, y1 as single, x2 as single, y2 as single) as single
Dim etaisyys2 as single
etaisyys2 = (x2 - x1) ^ 2 + (y2 - y1) ^ 2
etaisyys = sqr(etaisyys2)
End Function

Lumi-ukkeli [25.03.2005 22:33:52]

#

Voisitteko kertoa mistä löytyis apua kun yritän tehdä jonkunlaista savua peliin joka on DirectX8 & VB6:lla tehty?

tuomas [26.03.2005 00:32:03]

#

1. www.planetsourcecode.com
2. googleta 'partikkeliefektit'

hunajavohveli [26.03.2005 10:24:02]

#

Lumi-ukkeli kirjoitti:

Pääsisköhän tuo koodivinkkeihin?

Ei ehkä, mutta jokin opas, joka käsittelisi mm. tuon asian, olisi hyvä. Saatan jopa jossain vaiheessa esitellä tuon asian, kun kirjoittelen tässä opasta merkkigrafiikkapelien tekemisestä.

Lumi-ukkeli [26.03.2005 10:32:49]

#

No tuohan menisi kyllä ihan suoraan:

Private Function etaisyys(x1 as single, y1 as single, x2 as single, y2 as single) as single
etaisyys = sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
End Function

Onko joku tehnyt savuja 2D peleihin?

Lumi-ukkeli [26.03.2005 18:38:45]

#

Mistähän johtuu hienoinen nihkeys kun kiinnostaisi oppia tätä DX:ää, mutta kukaan ei tunnu tietävän / ei halua kertoa vai mikä on syynä?

Grey [26.03.2005 19:01:57]

#

Lumi-ukkeli kirjoitti:

Mistähän johtuu hienoinen nihkeys kun kiinnostaisi oppia tätä DX:ää, mutta kukaan ei tunnu tietävän / ei halua kertoa vai mikä on syynä?

Kukaan muukaan ei osaa? :-D

-Grey-

Latska [26.03.2005 19:24:49]

#

Lumi-ukkeli kirjoitti:

Mistähän johtuu hienoinen nihkeys kun kiinnostaisi oppia tätä DX:ää, mutta kukaan ei tunnu tietävän / ei halua kertoa vai mikä on syynä?

Kenties muitten mielestä Open GL tai muu vastaava on parempaa.

Lumi-ukkeli [27.03.2005 23:38:57]

#

Jos minulla on auto, jota pyöritetään mutta siitä pitää löytää aina vetokoukun koordinaatit, niin voiko tällä kaavalla löytää sen?

vetokoukku.x = auto.x + Sin(auto.kulma) * 10
vetokoukku.y = auto.y + Cos(auto.kulma) * 10

Minulla tuo näyttää kyllä päin metsää, mutta voiko tuon edes teoriassa saada toimimaan?

Gaxx [28.03.2005 00:46:32]

#

Kyllä, olettaen, että auto.x ja .y ovat auton keskuksen koordinaatit ja kulma on laskettu oikein(kai 180 enemmän, kuin "auton kulma". Kokeile itse). Sitten tietty kertoimen täytyy olla sopiva, että piste on juuri auton perän kohdalla, ettei se jää takapenkille tai laahaa maantiellä.

Lumi-ukkeli [28.03.2005 11:22:28]

#

Mitenkähän tämä on mahdollista?
Tuo kuva on piirretty DX8:lla koordinaatteihin 100, 100 ja viivat
(100, 100)-(400, 100) ja (100, 100)-(100, 400)


Sama tapahtuu myös Pset-metodilla ja muilla grafikkakomennoilla.

http://www.geocities.com/bigenergized/wtf.GIF

Lumi-ukkeli [28.03.2005 12:30:57]

#

Muuten toimii loistavasti paitsi että kun traktoria kääntää niin tuo vetokoukun paikka pyörii juuri vastakkaiseen(=väärään) suuntaan. Kulmat ovat kaikki radiaaneja. Mitenkähän tuo korjataan?

Gaxx [28.03.2005 14:02:05]

#

Pistä sen kulman eteen miinusmerkki niin pitäs toimia. Riippuu tietty hiukan toteutustavasta, mutta...

Lumi-ukkeli [28.03.2005 15:19:41]

#

Ei auta, pyörii edelleenkin samaan (=väärään)suuntaan.

hunajavohveli [28.03.2005 15:21:11]

#

No siis eihän koukun pidäkkään pyöriä vastakkaiseen suuntaan? Lisäät sen traktorin kulmaan 180 astetta eli radiaaneissa piin niin saa vetokoukun kulman.

Lumi-ukkeli [28.03.2005 15:46:48]

#

JIPII SE TOIMII!!!

Valitettavasti hunajavohvelin kommentti ei auttanut, mutta ISO kiitos kuitenkin kaikille auttaneille. Ja hunajavohvelihan on jo auttanut muutenkin mukavasti minua.

Lumi-ukkeli [28.03.2005 17:28:50]

#

Taitaa tässä kohdassa olla ongelma siinä, että kaksi laskua on riippuvaisia toisistaan?

vetokoukku.x = (Traktori.x + Traktori.leveys / 2) + Sin(Traktori.Kulma * rad) * Traktori.pituus / 2
vetokoukku.y = (Traktori.y + Traktori.pituus / 2) + Cos(Traktori.Kulma * rad) * Traktori.pituus / 2
kiinnitys.x = (Perakarry.x + Perakarry.leveys / 2) - Sin(Perakarry.Kulma * rad) * Perakarry.pituus / 2
kiinnitys.y = (Perakarry.y + Perakarry.pituus / 2) - Cos(Perakarry.Kulma * rad) * Perakarry.pituus / 2
Perakarry.Kulma = Kulma(vetokoukku.x - kiinnitys.x, kiinnitys.y - vetokoukku.y)

Ja se mitä tuossa on ongelmana ilmenee tästä:
http://www.geocities.com/bigenergized/TPv003B.zip (38kt)

Lumi-ukkeli [21.04.2005 08:00:35]

#

Lumi-ukkeli kirjoitti:

Taitaa tässä kohdassa olla ongelma siinä, että kaksi laskua on riippuvaisia toisistaan?

vetokoukku.x = (Traktori.x + Traktori.leveys / 2) + Sin(Traktori.Kulma * rad) * Traktori.pituus / 2
vetokoukku.y = (Traktori.y + Traktori.pituus / 2) + Cos(Traktori.Kulma * rad) * Traktori.pituus / 2
kiinnitys.x = (Perakarry.x + Perakarry.leveys / 2) - Sin(Perakarry.Kulma * rad) * Perakarry.pituus / 2
kiinnitys.y = (Perakarry.y + Perakarry.pituus / 2) - Cos(Perakarry.Kulma * rad) * Perakarry.pituus / 2
Perakarry.Kulma = Kulma(vetokoukku.x - kiinnitys.x, kiinnitys.y - vetokoukku.y)

Ja se mitä tuossa on ongelmana ilmenee tästä:
http://www.geocities.com/bigenergized/TPv003B.zip (38kt)

Tämä nyt on vanha aihe, mutta tuonhan olen saanut korjattua aikoja sitten. Tuossa on uusin versio: http://www.geocities.com/bigenergized/TPv008R.zip


Sivun alkuun

Vastaus

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

Tietoa sivustosta