Neuvoja vasta-alkajalle!
Tarkoitus olisi piirtää ruudulle yksikertaista grafiikkaa. Ymmärsin, että "perus C:llä" ei saa helposti grafiikkaa ruudulle, vaan pitää käyttää jotakin grafiikkakirjastoa. Yksinkertaisin ja tehtävään sopiva tuntuisi olevan TinyPTC Windows Version (http://sourceforge.net/projects/tinyptc/ ).
En ole löytänyt ohjeita TinyPTC:n käyttöönottoon, joten en tiedä kuinka TinyPTC:tä pitäisi käyttää Gcc:n (Mingw32 3.4.2) kanssa. Pelkkä "tinyptc.h" incluudaminen ei ainakaan riitä, vaikka mukana tulleessa esimerkissä test.c:ssä näin onkin tehty. Kuinka pääsisin eteenpäin?
Kiitokset kaikille, jotka osaavat neuvoa!
Tarkoitus olisi piirtää ruudulle yksikertaista grafiikkaa. Ymmärsin, että "perus C:llä" ei saa helposti grafiikkaa ruudulle, vaan pitää käyttää jotakin grafiikkakirjastoa. Yksinkertaisin ja tehtävään sopiva tuntuisi olevan TinyPTC Windows Version (http://sourceforge.net/projects/tinyptc/ ).
En ole löytänyt ohjeita TinyPTC:n käyttöönottoon, joten en tiedä kuinka TinyPTC:tä pitäisi käyttää Gcc:n (Mingw32 3.4.2) kanssa. Pelkkä "tinyptc.h" incluudaminen ei ainakaan riitä, vaikka mukana tulleessa esimerkissä test.c:ssä näin onkin tehty. Kuinka pääsisin eteenpäin?
Kiitokset kaikille, jotka osaavat neuvoa!
Vastaukset 21
Vanhimmat
MoveTo, LineTo jne. Kahva vaan skriiniin, niin ei ole vaikeata piirrellä tosi vääriinkään paikkoihin. GDI32.LIB, header: wingdi.h.
näppäillä gludisk, niin pääsee mukavasti alkuun vähän monipuolisenpien ja windowsin tehtailla siihen koneeseen käytännöllisesti katsoen valmiiksi asennettujen piirtofunktioittenkin kanssa pelailussa.
Hyviä pohjia löytyy esim.
http://cpp.mureakuha.com/win32/win32pohjaex.htm
Sivun Win32-tehtävät alta löytyy hyviä malleja mihin tuolla pääsee. Helpointa tapaa eli lomakkeita piirtämällä tehtyjä ei ole kunnolla esitetty. Jos käytät Dev-C tai VisualStudiota, niin molemmissa on Resource -osio, jossa piirtäminen suoritetaan. Tarkempia ohjeita täytyy vähän penkoa.
http://www.libsdl.org/
sdl käyttöön, siihen löytyy esimerkkejä vaikka kuinka ja olen käyttänyt sitä gcc:llä ja vc:llä.
ja devc ideen löytyy devpakki.
sorry, tinyptc:stä en tiedä mitään.
SDL:ssä grafiikan lisäksi ääni(mikseri), näppis, hiiri, joystick, timerit, threadit, CD-ROM, OpenGL ... ja API on lähes naurettavan helppo, lisäksi isot pojat on tehny sillä ihan oikeita kaupallisia pelejä esim. unreal tournament. Eli unohda muut.
http://en.wikipedia.org/wiki/Simple_DirectMedia_Layer
http://fi.wikipedia.org/wiki/SDL
saman tien kunnon kirjasto, ei järkeä jossain vaiheessa vaihtaa parempaan. SDL on kunnon kirjasto. Ja saa käyttää kaupallisissakin softissa (LGPL-lisenssi), ja ongelmitta (tai ainakaan isompia ongelmia) saat käännettyä sen monessa eri käyttiksessä (win, linux) ja macillakin.
En tajua kuinka joku nykyään haluaa opetella win32 apin, koska tällaisia järjestelmäriippumattomia kirjastoja on tehty. Ja käyttäjiä on muitakin kuin windowsin käyttäjät. Ja sama, kuinka joku opettelee jonkun linuxin x:n apin koska ..sama homma. Niin joo ikkunointi menu ym vaikka wxWindowsilla, fltk:lla, gtk:lla, qt:lla. Ja usean käyttiksen tuki.
:)
-tyytyyväinen sdl-käyttäjä
"saman tien kunnon kirjasto, ei järkeä jossain vaiheessa vaihtaa parempaan. "
Siis aina järkevää vaihtaa parempaan mutta valitsee sdl:n niin kovin äkkiä parempaa ei löydy.
Ja onpahan se javallekin, c#:lle jne.
-tyytyyväinen sdl-käyttäjä
(ei mainospuhe vaan vain käyttäjän kommentti)
En oo samaa mieltä tuosta SDL:stä. Jos tietää jossain vaiheessa joutuvansa tekemään wintoosalla tai linuxilla jotain erikoisempaa kuin commandline -nöyhtiä, on sen apin käytön kumminkin opeteltava. Ei se SDL niin kattava ole, että sillä pärjäisi.
Ja jos aattelee nykyisten ohjelmien elinikää, niin hyvä on jos pari vuotta vanhasta ohjelmasta saat rääpästyä jotain seuraavaan projektiin. Aika pientä osaa vieläpä tarvii käyttää monessa ympäristössä. Nykyisin kaikki on kertakäyttöisiä myös koodit.
En ole myöskään samaa mieltä mitä kirjoitit, ohjelmakoodi kannattaa tehdä niin että saa uudelleen käytettyä sen. Miksi keksiä/kirjoittaa "pyörää" uudelleen jos se on jo tehty, säästyy aikaakin siinä. Ja näitä ilmaisia kirjastoja wxWindows ym hoitaa apin käyttäjän puolesta joten miksi mennä itse apiin. Nämä projektit kumminkin säilyy hengissä joten miksi ei voisi hyödyntää niitä mitä on.
Eli ei keksitä pyörää uudelleen.
Joo, SDL ei kata kaikkea, ehkä multimedia/peli -kirjastoksi sopii mutta muihin onkin eri kirjastot.
Aikoinaan halusin tehdä kaiken itse: grafiikkakirjastot, ääni, ym ym tein niitä vuosia ja myöhemmin tajusin, en muuta saanutkaan aikaan. Ja valmiita (ja huomattavasti parempia) ilmaisia kirjastoja oli jo jaossa, olisin hyödyntänyt niitä niin olisin voinut toteuttaakin "hyviä" peli/ohjelma -ideoita. Käteen ei paljon jäänyt, laitteistotasolla ohjelmointi kyllä (ei paljoa hyödytä enää).
muuhun käyttöön:
http://www.wxwidgets.org/
"Nykyisin kaikki on kertakäyttöisiä myös koodit."
Se vie vähän enemmän aikaa suunittella koodia joka on käytettävää ja geneeristä, mutta usko pois se kannataa.
Mistä siis koodi joka toimii sekä x32/x64/muissa ympäristöissä ja kaikilla suorittimilla ? SDL ei tuo siihen mitään ratkaisua. Java on lähes ainoa laitteistoista riippumaton ympäristö.
Ja mitä esim. seuraavassa on kerrottu koodien uusiokäytöstä:
http://members.safe-t.net/jwalker/programming/interview.html
Useimmiten vanhan koodin muokkaamiseen menee enemmän aikaa kuin kokonaan uuden rakentamiseen. Suuren määrän koodia saa muutamalla hiiren klikauksella (C ). Ja mahtaakohan tuolla nykyisellä SDL:n versiolla kirjoiteltu koodi kääntyä tulevissa versioissa ? Jatkuvasti tulee uusia DirectX -paketteja ja 'pieniä' muutoksia käyttiksiin. Aika ihmeellinen paketti täytyy olla, että toimisi nykyisissä järjestelmissä XP/2003/vista/longhorn... saati sitten tulevissa.
Ja jos toimii, niin sitten on niin hidas kuin Java.
"Mistä siis koodi joka toimii sekä x32/x64/muissa ympäristöissä ja kaikilla suorittimilla ? SDL ei tuo siihen mitään ratkaisua."
Ei vai? Lue nuo:
http://www.libsdl.org/faq.php?action=listentries&category=1#54
http://wxwidgets.org/docs/faqgen.htm#platforms
"Java on lähes ainoa laitteistoista riippumaton ympäristö."
Java ei ole laitteistosta/KJ:stä riippumaton, koska sille on eri versiot eri KJ:lle:
http://www.java.com/en/download/manual.jsp
Siis Javan VM toteutetaan jokaiselle KJ erikseen. SDL ja wxWidgets määrittelee "cross platform"-API:n, joka myös toteutetaan jokaiselle KJ/alustalle erikseen. Erona se että SDL/wxWidgets toteutukset ovat natiiveja eli toimivat ja näyttävät samoilta kuin ko. KJ:n grafiikka muutoinkin.
http://wxwidgets.org/about/screensh.htm
"Ja jos toimii, niin sitten on niin hidas kuin Java."
Ei ole. SDL/wxWidgets toimii yhtä nopeasti kuin natiivikirjastotkin. (wxWidgets on joissakin jutuissa hieman hitaampi (kuin natiivit)) Ja alustaspesifiset toimii paremmin kuin Javassa: http://wxwidgets.org/docs/faqgen.htm#specific
Luepa vielä: http://gameprogrammer.com/sdl.html
http://wxwidgets.org/docs/faqgen.htm#jave
- Missä kohdassa luki jotain X64:stä ?
- Ja niin kuin useammassa kohdassa luki, muut ympäristöt kuten kämmentietokoneet ovat vasta tekeillä
- Jos tämä nyt oli pelikirjasto, niin jos katselee nykyisiä pelejä, mikä niistä winkkarille tehdyistä on OpenGL:ää käyttävä ? Vai onks kyseessä puuauto, joka ei todellisuudessa sovellukaan kaikkien pelien tekoon ?
"Mistä siis koodi joka toimii sekä x32/x64/muissa ympäristöissä ja kaikilla suorittimilla ? SDL ei tuo siihen mitään ratkaisua."
Mikä SDL oikein on ? se on yksinkertaisesti wräpperi eli API säilyy samana. SDL toteutaa primitiivisen apin.
Mikä estää tekemästä uuden version XP:lle, Vistalle jne. mutta windowsin API ei muutu niin tiuhaan.
Kuten SDL niin wxWidget vaatii portattavan osuuden jonka päälle toiminallisuus tulee. Tämä on ainut järkevä tapa tehdä cross platform ympäristö. Esim GTK käytää GLib kirjastoa joka on portattava osuus.
Java tomii samalla tavalla, siinäkin on se natiivi osuus.
Ja mitä tulee koodin uusiokäyttöön, esim jos sinun pitää parsia XML:n teetkö itse parserin vai käytätkö valmista ?
"- Missä kohdassa luki jotain X64:stä ?"
Vaikka tuolla: http://rpmfind.net/linux/RPM/suse/updates/10.1/i386/rpm/ppc/SDL-64bit-1.2.9-19.5.ppc.html
"- Jos tämä nyt oli pelikirjasto, niin jos katselee nykyisiä pelejä, mikä niistä winkkarille tehdyistä on OpenGL:ää käyttävä ?"
Doom 3, Unreal Tournament tulee mieleen.
http://en.wikipedia.org/wiki/List_of_Games_using_SDL
Toi linkki ei toiminut. www.libsdl.org:n sivuilla ei ainakaan download -osastolta löydy yhtään X64 -versiota. Taitaa X64 olla vielä pahasti kesken.
Kun katsoo idsoftwaren nettisivuilta Doom3:n vaatimuksia, siellä lukee DirectX 9.0b ja Unreal Tournament 2004:n vaatimuksena sama versio.
Wikipediassa listatut ovat siis suurelta osin jälkeen päin tehtyjä versioita SDL:lle. Myytävät versiot ovat jotain muuta.
"Mikä SDL oikein on ?"
Etusivun mukaan 'multimedia library' eli soveltuu moniin tehtäviin, mutta ei kannata soveltaa jokaiseen ohjelmaan. Varmasti ihan pätevä yksinkertaisten pelien tekoon ja multimedia ohjelmiin.
En silti käyttäis sitä ohjelmien tekoon, koska koordinaattien antaminen ikkunoita piirrettäessä ei kuulosta nykypäivältä. Resurssieditorilla saa siis yksinkertaisia ohjelmia paljon nopeammin ja helpommin, kun ei tarvitse katsella ohjeista ikkunoiden tyylejä / piirtokäskyjä.
"jos sinun pitää parsia XML:n teetkö itse parserin vai käytätkö valmista ?"
Totta kai valmista samoin kuin kuvien käsittelyyn ja tiedostojen pakkaamiseen, mutta mitään niistä en oo koodannut ite. Enkä tarkoittanut myöskään että tekisin windowsin apin ite.
Jos sen sijaan teen jonkin ohjelman - vaikka sillä resurssieditorilla - niin ei siitä seuraavaan projektiin saa juuri mitään. Ikkunat on aina eri paikassa ja erilaisia. Näin ollen koodi niitten takana on joka kerta erilainen.
"Taitaa X64 olla vielä pahasti kesken."
En tiedä, mutta tuolla lukee: http://www.libsdl.org/release/changes-1.2.html
"SDL has been ported to 64-bit Windows."
Muistaakseni UT2004/Doom3 käyttävät joistain syystä DirectX:n ääni/joystick-tukea tai jotain. Grafiikka on OpenGL ja se näkyy esim. UT huonona tuloksena Vistassa: http://www.tomshardware.com/2007/01/29/xp-vs-vista/page4.html#3d_games
Joka taas johtuu: http://fi.wikipedia.org/wiki/Windows_Vistan_kritiikki#Aero-Glass.2C_DirectX_ja_OpenGL
MS:n tavoitteena on kai kuopata OpenGL Windowsilla ja samalla varmistaa ettei pelejä julkaista muille alustoille, mutta toisaalta ainakin Nvidialla on Vistalle OpenGL-tuki. (ööö .. meni vähän off-topic) http://www.nvidia.com/object/winvista_x86_100.59.html
X64:ssä en saa kuin sinisen ruudun ja eikun uutta boottia koneeseen. Se näyttää olevankin jo aikaisemmin ilmoitettu bugi.
Siinä aikaisemmassa linkissäsi oli vastaus tuohon DirectX osuuteen: http://en.wikipedia.org/wiki/List_of_Games_using_SDL
Linkin mukaan siis Linux versiossa on käytössä SDL.
Mutta eiköhän tilanne korjaannu, kun SDL 1.3 versio valmistuu... Näyttäis olevan tulossa aikamoinen liuta parannuksia.
kyseinen esimerkki on tehty vc6 joten voit joutua hieman kikkailemaan.
Mutta ymärtääkseni tuon nimi on nykyään pixeltoaster:
http://www.pixeltoaster.com/
ja dokumentaatiokin on parantunut.
Näin:
1. Lisäät komentoriville -I lipun, jossa kerrot kääntäjälle, missä tinyptc.h sijaitsee.
2. Lisäät komentoriville -l (pikku L) lipun, jossa kerrot, että käytät tinyptc-kirjastoa (ehkä -ltinyptc).
3. Lisäät komentoriville -L lipun, jossa kerrot kääntäjälle, missä libtinyptc.so sijaitsee.
Esim:
gcc -o tester tester.c -ltinyptc -I/usr/local/include -L/usr/local/lib
Sinun pitää siis linkata ohjelmasi tinyptc-kirjastoa vasten.