Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: peliohjaus c++:lla

Sivun loppuun

PFe2005 [27.02.2005 19:08:25]

#

Miten saan esim.pisteen ohjelmaan jota voi liikutella nuolilla? Voisitteko kertoa koko koodin siihen.

Metabolix [27.02.2005 19:18:26]

#

Gaxx [27.02.2005 19:29:02]

#

Jos ongeman ydin on grafiikan piirtäminen, voinen ohjata sinut tänne.

Jos ongelman ydin taasen on pikselin liikuttaminen, lue metabolixin kolmas kohta.

GorkkiusSuuri [28.02.2005 00:48:00]

#

Ekan kerran kun luin ton viestin niin tajusin että haluat nuolilla liikuteltavaan ohjelmaan pisteen

Metabolix [28.02.2005 02:17:23]

#

GorkkiusSuuri kirjoitti:

Ekan kerran kun luin ton viestin niin tajusin että haluat nuolilla liikuteltavaan ohjelmaan pisteen

Niinhän siinä näköjään lukeekin :D Anteeksi, luin huolimattomasti :) No vastataanpa siihen sitten.

Yksi hyvä vaihtoehto on SDL, johon löytyy opas ihan Putkasta (tuo Gaxx:n linkki). Sitten on näitä muita grafiikkakirjastoja, kuten OpenGL, joihin myös löytyy oppaita ihan yllin kyllin. Jos teet ohjelmaa johonkin suojaamattoman tilan järjestelmään (esim. DOS), voit käyttää suoraa muistinosoitusta ja mahdollisesti BIOS-keskeytyksiä.

Pikselin piirtäminen ei varmaan ole temppu eikä mikään, jos osaa tehdä ohjelman, jota liikutellaan nuolilla :P

PFe2005 [28.02.2005 14:45:35]

#

Minä käytän Dev-c++tä ja olen asentanut siihen SDL:llän, mutta tulee tälläisiä valituksia tuossa kun yritän kääntää tuota SDL esimerkkiä johon Gaxx antoi linkin:
[Linker error] undefined reference to `SDL_Init', [Linker error] undefined reference to `SDL_GetError' , [Linker error] undefined reference to `SDL_SetVideoMode' , [Linker error] undefined reference to `SDL_Delay' [Linker error] undefined reference to `SDL_Quit' , [Linker error] undefined reference to `WinMain@16' ja ld returned 1 exit status. Missä vika?

Heikki [28.02.2005 15:09:26]

#

Lukaiseppas oppaat-osiosta löytyvä SDL:n asennusopas. Linkkerisi ei löydä SDL:n kirjastoa...

PFe2005 [28.02.2005 19:08:31]

#

Tuossa SDL esimerkissä on vain neuvottu Visual c++:lle miten kirjastot sisällytetään ohjelmaan : #pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "SDL.lib"). Mutta miten nämä saa sisällytettyä Dev-c++:aan?

Meitsi [28.02.2005 19:10:20]

#

Menet projektin asetuksiin, siellä pitäisi olla noille kohta.

PFe2005 [28.02.2005 19:38:34]

#

Kiitti paljon! Sain sen toimimaan! "Käytä hakua. Tätä on kysytty aika usein." Itse en ole löytänyt yhtään aihetta joka käsittelisi tätä.
Opiskelin vähän tuota SDL käyttö opasta niin sain käännettyä sen esimerkki koodin ja laitettua kaksoispuskurin päälle ja ottamaan kuvan muistiin mutta mihin kohtaan tuo funktio joka piirtää parametrina annetun kuvan ruudulle pitäisi laittaa kun ei meinaa kääntäjä suostua kääntämään tuota.

Gaxx [28.02.2005 20:25:50]

#

Joko lykkäät sen ennen main() -funktiota tai sitten laitat sen sen jälkeen ja lisäät sen funktion esittelyn ennen main() -funktiota.

int piirra(SDL_Surface kuva, int x, int y); // esittely

int main() {
    piirra(kuva, x, y);
    return 0;
}

void piirra(SDL_Surface kuva, int x, int y) {
    //piirtäminen
}

PFe2005 [28.02.2005 20:28:20]

#

Juu nyt sain sen muuten toimimaan mutta kun yritän piirtää kuvaa näytölle niin tulee valituksia. (PiirraKuva(kuva, naytto, 50, 50);)

Gaxx [28.02.2005 20:29:24]

#

No raotappa vähän sitä koodia niin katsotaan :)

Ja millasia valituksia kuuluu?

Hara Kiri [01.03.2005 09:56:20]

#

Jos käännät Dev-C++:lla SDL:ää, voi myös linkkerin parametreihin laittaa: -lmingw32 -lSDLmain -lSDL

Sama kai tulee myös, jos aloittaa uuden SDL projektin.

PFe2005 [01.03.2005 16:56:12]

#

#include <SDL/SDL.h>  // sisällytetään SDL:n otsikkotiedostot

int main(int argc, char *argv[]) {
    SDL_Init()

    if( SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError());
        return 0;
    }

    SDL_Surface * naytto;
    SDL_Surface *kuva;
naytto = SDL_SetVideoMode(1024, 768, 30, SDL_HWSURFACE|SDL_FULLSCREEN|SDL_DOUBLEBUF);
kuva=SDL_LoadBMP("kuva.bmp");

    SDL_Delay(5000);

    SDL_Quit();
    return 0;
}

   void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y)
{
  SDL_Rect alue;
  alue.x = x;
  alue.y = y;
  SDL_BlitSurface(kuva, NULL, naytto, &alue);
}

Tuo koodi kääntyy mutta jos yritän piirtää tuota kuvaa PiirraKuva(kuva, naytto, 50, 50); niin ei mee läpi. Tosin en tiedä onko tuo funktio oikeassa paikassa.

(Mod. Edit. Kooditagit.)

zacura [01.03.2005 17:21:01]

#

void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y)
{
SDL_Rect alue;
alue.x = x;
alue.y = y;
alue.w = Kuvan_Leveys;     //Nämä pitää myös asettaa
alue.h = Kuvan_Korkeus;
SDL_BlitSurface(kuva, NULL, naytto, &alue);
}

PFe2005 [01.03.2005 17:39:04]

#

juu. Sainsen toimimaan ihan tolla aikaisemmin mainitsemallani tavalla. Funktio oli väärässä paikassa. Se piti olla koodin alussa.

Metabolix [01.03.2005 17:44:49]

#

Lisääpä alkuun (siis ennen main-funktiota) PiirraKuva-funktion esittely:
void PiirraKuva(SDL_Surface *kuva, SDL_Surface *naytto, int x, int y);

Ja opettele käyttämään kooditagia, kun laitat tänne koodinpätkiä.
Edit: Myöhästyin :(

PFe2005 [01.03.2005 18:01:57]

#

Vaikka laitan tuon SDL_Flip(naytto); jutun tonne koodiin ja kääntäjä kääntää sen niin ei kuva näy (käytän kaksoispuskurointia.) Missä vika? Kenties (taas) väärässä paikassa koodia?

PFe2005 [01.03.2005 19:08:53]

#

Sain sen toimimaan!

PFe2005 [02.03.2005 18:25:42]

#

Miten saisi tehtyä animaatioita käyttäen SDL:ää?

Heikki [02.03.2005 19:56:30]

#

Suoraa tapaa ei ole ainakaan ilman lisäkirjastoja, piirrä vaikka vuorotellen eri kuvia (vaikkapa saman kuvatiedoston eri kohdista).

PFe2005 [02.03.2005 20:37:21]

#

Miksei tämä toimi (sen siis pitäisi vaihtaa kuvaa edes takaisin?)

if ( kuvotta==0 && nappi[SDLK_RIGHT] ) {
             ukkelix += 5;
             kuva = SDL_LoadBMP("kuva.bmp");
             kuvotta==1;
             }

        if ( kuvotta==1 && nappi[SDLK_RIGHT] ) {
             ukkelix += 5;
             kuva = SDL_LoadBMP("kuva1.bmp");
             kuvotta==0;
             }

sqwiik [02.03.2005 21:04:45]

#

Muutamia pikkuvirheitä:

kuvotta == 1; // Tyhjä lause; pitäisi kai olla kuvotta = 1; ?
/* Ensimmäisessä ehdossa kuvotta asetetaan 1:ksi, joten myös toinen if suoritetaan. Kuva siis vaihtuu, mutta liian nopeasti että sitä kenties ehtisi havaita. */
if ( kuvotta==1 && nappi[SDLK_RIGHT] ) {
if ( kuvotta==0 && nappi[SDLK_RIGHT] ) {

PFe2005 [03.03.2005 13:29:50]

#

No miten sitten?

samlui [03.03.2005 14:21:37]

#

esim.

SDL_Surface *kuvat[2];
kuvat[0] = SDL_LoadBMP("kuva1.bmp"); //ladataan kuvat
kuvat[1] = SDL_LoadBMP("kuva2.bmp");

int kuva = 0; //asetetaan muuttuja joka sisältää näytettävan kuvan numero

//...

if(keys[SDLK_RIGHT])
{
 kuva++;                  //kasvatetaan lukua
 if(kuva > 1) kuva = 0;    //jos yritetään näyttää kolmatta kuvaa näytetään eka kuva
}

//sit blittaa sen kuvan minne haluat tyyliin
SDL_BlitSurface(kuvat[kuva],&src,screen,&dest);

tähän voi sitten laittaa enemmänkin kuvia muuttamalla hiukan

PFe2005 [03.03.2005 17:36:26]

#

Valittaa tämmöstä: `kuva' undeclared (first use this function)

Meitsi [03.03.2005 17:41:03]

#

Laita muuttujan määrittely "int kuva = 0;" koodin alkuun heti includejen jälkeen ja kokeile.

PFe2005 [04.03.2005 08:24:09]

#

Jes!!! Toimii!!! Kiitti Meitsi!

samlui [04.03.2005 15:28:52]

#

kyl tos mun koodis on toi

int kuva = 0;

se on noiden surfacejen alapuolella xD

PFe2005 [04.03.2005 16:38:33]

#

Mulla toimii vaan toi animaatio jos liikun oikealle vaikka koodi on myös vasemmalle laitettuna. Jos molemmissa niin ei tapahdu mitään tai koko ajan toistuu animaatio(riippuu miten niitten kanssa häslää.)

PFe2005 [05.03.2005 11:59:05]

#

Tuo näppäin koodi lista tuole SDL:älle ei suostu aukeamaan niin voisitteko kertoa mikä on CTRL:än näppäinkoodi (tarkoitan esim. SDLK_RIGHT on ylös.)

Ja voisinko tehdä jollain ohjelmalla 3d ukkelin ja miten liitän sen ohjelmaan. Esimerkkejä? Mitä ohjelmia vois käyttää?

Metabolix [05.03.2005 12:23:32]

#

3D-ohjelmia on monia, esimerkiksi vaikka Anim8or tai Blender. 3D-systeemeihin omissa ohjelmissasi tarvitset DirectX:ää tai OpenGL:ää, mutta kun sinulla kerran on hankaluuksia 2D-ohjelmienkin kanssa, niin kannattaa varmaan ensin väsäillä niitä hetken verran ennen 3D:n yrittämistä. OpenGL:ssä pääsee hyvin alkuun NeHe:n tutoriaaleilla.

Oikea Control = SDLK_RCTRL
Vasen Control = SDLK_LCTRL

PFe2005 [05.03.2005 16:16:34]

#

Tuli ongelma. Miten tämä tehdään niin että se kääntyy:

if (ukkelix = pahisx + 50) {

?

hunajavohveli [05.03.2005 16:23:42]

#

Oikea vertailuoperaattori on ==
Pelkkä = on sijoitusoperaattori.

PFe2005 [05.03.2005 16:31:58]

#

Koodi on tämmäinen:

if ( nappi[SDLK_RCTRL] ) {
            vaikee = 2;
            PiirraKuva(tausta, naytto, 0, 0);
            PiirraKuva(kuva[vaikee], naytto, ukkelix,ukkeliy);
            PiirraPahis(pahis[paha], naytto, pahisx, pahisy);
            SDL_Flip(naytto);
            vaikee = 0;
            if (ukkelix == pahisx + 50 ) {
            pahisx = 100;
            }

Mutta ei toimi. MIssä vika? Toimii ilman näitä:

if (ukkelix == pahisx + 50 ) {
             pahisx = 100;

hunajavohveli [05.03.2005 16:33:48]

#

Sinulta puuttuu lopusta toinen } jonka pitäisi lopettaa ensimmäinen if-lauseke.

PFe2005 [06.03.2005 08:19:14]

#

Miten saisi vastustajan liikkumaan koko ajan eteenpäin ja vaihtamaan koko ajan kuvasta 1, kuvasta kahteen?

Metabolix [06.03.2005 08:36:17]

#

Yritäpä ajatella itse (ei millään pahalla). Se voisi liikkua koko ajan, jos se ei olisi if-lauseen sisällä. Liikesuunta riippuu täysin siitä, minne sitä päätät liikuttaa. Pienenä vihjeenä: kun toistaiseksi käytät vain kahta kuvaa, niin luvun saa vaihtumaan 0:n ja 1:n välillä xor-operaatiolla:

int kuva = 1;    // Kuva = 1;
kuva = kuva ^ 1; // Kuva = 0;
kuva = kuva ^ 1; // Kuva = 1;

Lisäksi suosittelisin, että et laita tuota kuvan piirtäa if-lauseen sisään, vaan teet näin:

if ( nappi[SDLK_RIGHT] ) {
  // Liikutaan Oikealle
}
else
if ( nappi[SDLK_LEFT] ) {
  // Liikutaan Vasemmalle
}
// Jne.

// Ja lopuksi piirretään:
PiirraKuva(tausta, naytto, 0, 0);
PiirraKuva(kuva[vaikee], naytto, ukkelix,ukkeliy);
PiirraPahis(pahis[paha], naytto, pahisx, pahisy);
SDL_Flip(naytto);

Tekemällä oppii :)
Ja kohta varmaan törmäät siihen, että haluat maailman olevan isompi kuin ikkunasi. Silloin kannattaa suhteuttaa kaikki koordinaatit ukkelin koordinaatteihin, piirtää ukkeli keskelle ruutua ja muut oikeaan kohtaan sen ympärille.

Liikemäärä kannattaa myös suhteuttaa kuluneeseen aikaan (kaikki koneet eivät ole yhtä nopeita). SDL_GetTicks() tjsp.

PFe2005 [07.03.2005 15:50:27]

#

Miten saan vastustajan vaihtamaann kuvaa vaikka joka kolmas sekuntti?

Metabolix [07.03.2005 16:21:42]

#

Laskemalla sekunteja tuolla SDL_GetTicks()-funktiolla (palauttaa alusta kuluneet tuhannesosat) ja aina 3 sekuntin välein vaihtamalla sitä kuvaa. Älä tule kysymään miten, vaan yritä ensin itse miettiä. Vihje: käytä muuttujia, laske viimeisestä vaihdosta kulunutta aikaa ja hyödynnä > ja < -merkkejä.

PFe2005 [07.03.2005 17:00:31]

#

Äh! Kerro?! Yritin katoa apua mureakuhalta ja itekkin yritin häslätä ja sain siitä jotakin selville mutta en ymmärää miten käyttää sitä.

Metabolix [07.03.2005 17:28:15]

#

// Tämä laitetaan jonnekin ennen ohjelman pääsilmukan alkua:
VanhaAika = SDL_GetTicks();

// Ja nämä tulevat pääsilmukan sisälle:
VanhaAika = UusiAika;
UusiAika = SDL_GetTicks();
Aika = UusiAika - VanhaAika;

// Ja nyt tiedämme, että aikaa viimekerrastaon kulunut Aika millisekuntia.

// Lisätään tämä kulunut aika Tyypin_Kuvan_Ajastus -muuttujaan
Tyypin_Kuvan_Ajastus = Tyypin_Kuvan_Ajastus + Aika;

// Jos on kulunut yli 3 sekuntia eli 3000 millisekuntia
if (Tyypin_Kuvan_Ajastus > 3000)
{
  // Vähennetään ajastimesta tämä kulunut 3000 ms
  Tyypin_Kuvan_Ajastus = Tyypin_Kuvan_Ajastus - 3000;

  // Seuraava kuva
  Tyypin_Kuva = Tyypin_Kuva + 1;

  // Ja jos kuva on liian pitkällä, palataan animaation alkuun
  if (Tyypin_Kuva > Viimeinen_Tyypin_Kuva)
    Tyypin_Kuva = 0;
}

Ei se nyt niin vaikeaa voi olla. Kaikki tyyppien liikkeetkin kannattaa suhteuttaa tähän kuluneeseen aikaan (ja muuttaa sijainnit liukuluvuiksi), kuten olen jo aiemmin tainnut selittää.

Heikki [07.03.2005 17:40:46]

#

Tuossa hunajavohvelin ideassahan ohjelman suoritus pysähtyy aina 3 sekunniksi (jos siis tajusin oikein). Hyvä keino on pääsilmukkaa suoritettaessa katsoa onko viime kuvanvaihdosta kulunut se n sekuntia (1s on 1000ms), ja jos on niin vaihdetaan kuva ja laitetaan muuttujaan uusin vaihtoaika.

Tuolla tietyn ajan looppaavalla loopilla on sitten hyvä tehdä "fps-lukko" joka estää fps:n nousun turhan korkealle.

Mutta tosiaan kannattaa itse pähkäillä asiat, sillain ne oikeasti oppii. Jos (perus)asian kuulee jossain foorumilla, ei sitä välttämättä tajua täysin ja sitten tulevaisuudessa tulee ongelmia.

Edit. Metabolix oli nopeampi

hunajavohveli [07.03.2005 17:55:52]

#

Heikki kirjoitti:

Tuossa hunajavohvelin ideassahan ohjelman suoritus pysähtyy aina 3 sekunniksi (jos siis tajusin oikein).

Joo, käsitin tuon väärin, poistin sen viestin.

PFe2005 [08.03.2005 15:05:19]

#

Eipä toimi. Tyypin_Kuvan_Ajastus muuttuja ei kasva ollenkaan.

Metabolix [08.03.2005 15:21:48]

#

Ja olet varmasti laittanut nuo oikeaan paikkaan? Huomauttaisin ensimmäistä riviä koskevasta kommentista... Eli sen rivin saa laittaa heti SDL_Init-funktion perään.

PFe2005 [09.03.2005 15:26:09]

#

En vaan saa tota toimimaan. Noi on pää-loopissa:

int UusiAika = SDL_GetTicks();
VanhaAika = UusiAika;

int Aika = UusiAika - VanhaAika;
int kakka = kakka + Aika;

ja SDL_int-funktion jälkeen on int VanhaAika = SDL_GetTicks();

Miten saan esineen lentämään joka koneella samaa vauhtia käyttäen ylempänä olevia muuttujia. Ja mikä komento aja saman asian C++ kuin QBasicin GOTO-käsky?

Metabolix [09.03.2005 18:17:15]

#

Kun et osannut laittaa niitä oikeaan järjestykseen, vaan menit muuttelemaan itse. Vaihda kahden ensimmäisen paikkoja. Saman nopeuden eri koneilla saat tietenkin kertolaskun avulla: liikutat sitä matkan X joka millisekunti, joten kerrotaan X millisekuntien määrällä.

GOTO-käskynä toimii goto, mutta sitä ei yleensä ole mitään tarvetta käyttää.

PFe2005 [09.03.2005 19:17:51]

#

Noni! Toimiihan se! Mutta pitäs saada sillee tehtyä että kun painetaan CTRL niin puukko lähtis liikkeelle (oikealle) käyttäen tota SDL_GetTick();. Ohjelman pitäisi pyöriä kummiskin samaa aikaa kun puukko lentää ja en osaa tehdä näin. Miten voisin siis saada näppäintä painetta essa puukon tietyllä nopeudella lähtemään oikealle käyttäen SDL_GetTicks funktionta?

Megant92 [09.03.2005 21:54:34]

#

Ei millään pahalla, mutta
jos haluat ohjelmoida jotakin itse, niin älä kysy kaikkea muilta.Jos et onnistu ilman, että kysyt kaiken muilta jatka sitä joskus toiste.Jos laittaisit sen tarkistamaan onko puukko liikkeellä ja jos on niin laita se piirtämään uusi kuva.Laita se tarkistus sinne moottorin sekaan.

Heikki [09.03.2005 21:59:20]

#

Siis puukon pitäisi lentää ja samalla muunkin ohjelman "toimia" eli pyöriä (esim. hahmon liikkua) vai?

Jos tajusin oikein, niin pistä johonkin muistiin puukon tiedotot (paikka, suunta, tila) ja sitten jokaisella pääsilmukan suorituskerralla muutat puukon sijaintia suunnan mukaan mikäli tila-muuttujassa on, että puukko ollaan heitetty.

SDLK_RCTRL on oikeanpuoleisen CTRL-näppäimen näppänivakio ja vastaavasti vasemmanpuoleisen on SDLK_LCTRL.

Tiettyä nopeutta varten on yksi hyvä tapa tehdä tämäntapainen looppi:

//lukitaan fps 33:een
//alkuaika-muuttujassa on aika minkä SDL_GetTicks() antaa pääsilmukan alussa, tämä tulee loppuun:
while (SDL_GetTicks() - alkuaika < 33);

Siinä pitäisi olla tarpeeksi vinkkiä, ja kuten aiemmin sanoin, kun asiat pähkäilee itse niin ne myös oppii.

Metabolix [10.03.2005 05:58:05]

#

Tuo Heikin tapa on siltä kannalta huono, että tuo hidastaa pelin toimintaa, jos kone ei pysty tuohon vauhtiin, ja tekee koko pelistä nykivämmän koneella, joka pystyisi muuten pitämään korkeampaa fps:ää. Kyllä ehdottomasti paras on suhteuttaa kaikki aikaan tavalla tai toisella. Joko kertolaskua käyttäen tai tekemällä kaksi sisäkkäistä silmukkaa:

while (1)
{
  // Tässä lasketaan kulunut aika

  while (Aika--)
  {
    // Täällä tehdään asiat, ei tarvitse huomioida aikaa mitenkään
  }

  // Ja tänne kuvan piirto
}

PFe2005 [11.03.2005 17:05:07]

#

if (puukko == 1){
          ammx = ukkelix;
          while (ihme <= 50) {
           puukko = 0;
           ammx = ammx + 40;
           PiirraKuva(tausta, naytto, 0, 0);
           PiirraKuva(kuva[vaikee], naytto, ukkelix,ukkeliy);
           PiirraPahis(pahis[paha], naytto, pahisx, pahisy);
           PiirraAse(ase[asek], naytto, 10, 730 );
           PiirraAmmu(ammu[ammuk], naytto, ammx, ammy);
           SDL_Flip(naytto);

           if (pahisx <= ammx){
                      pelama--;
           if (pelama == 0){
                      paha = 3;
                      break;
                      }
           PiirraKuva(tausta, naytto, 0, 0);
           PiirraKuva(kuva[vaikee], naytto, ukkelix,ukkeliy);
           PiirraPahis(pahis[paha], naytto, pahisx, pahisy);
           PiirraAse(ase[asek], naytto, 10, 730 );
           SDL_Flip(naytto);
           ammx = ukkelix;
           break;

           }
           }

kun pelama = 0 niin koko ohjelma loppuu vaikkei pitäisi! Missävika?

Mazuli [12.03.2005 12:10:36]

#

vähän vaikea sanoa tuollaisesta koodista

hunajavohveli [12.03.2005 12:17:31]

#

Mistäköhän tuo nyt oikein yrittää breakata ulos tuossa?
Jos se tuosta whilestä poistuu eikä siellä ole enää mitään edessäpäin niin tokihan se sitten loppuu.

PFe2005 [12.03.2005 12:28:14]

#

Tuo on koodi on pää loopin sisällä.

Metabolix [12.03.2005 16:28:15]

#

Mitä järkeä on tehdä while-silmukka, jonka lopussa on break? Muuta se if-lauseeksi ja laita tuon jälkimmäisen if-lauseen jälkeen else ja loput lauseet, niin säästyt koko break-väsäilyiltä.

hunajavohveli: kyllähän sen periaatteessa pitäisi toimia ihan oikein, kun kerran on whilen sisällä. Uloin silmukka aina rikotaan.

PFe2005 [12.03.2005 19:11:04]

#

Onko SDL:ässä jotain cout-funktiota vastaavaa toimintoa?

Heikki [12.03.2005 20:12:06]

#

PFe2005 kirjoitti:

Onko SDL:ässä jotain cout-funktiota vastaavaa toimintoa?

Ei, mutta konsoliin (stdouttiin) voit tulostaa ihan coutilla. Jos haluat ikkunaan tekstiä, sinun on joko käytettävä jotain fonttikirjastoa tai tehtävä sellainen itse.

Deewiant [12.03.2005 20:13:57]

#

cout ei ole funktio, vaan olio.

PFe2005 [12.03.2005 21:11:42]

#

Hups. Ajatuksissani kirjoittelin

PFe2005 [13.03.2005 09:30:05]

#

Luin ton SDL:än oppaan tuosta SDL_mixeristä mutta en saa sitä toimimaan. Voisitteko antaa jonkun esimerkki koodin miten sitä käytetään? Mulla tulee täläisiä virheitä: "expected identifier before '-' token" , " expected `,' or `...' before '-' token", "ISO C++ forbids declaration of `parameter' with no type".

Linkku [13.03.2005 10:20:02]

#

PFe2005 kirjoitti:

Luin ton SDL:än oppaan tuosta SDL_mixeristä mutta en saa sitä toimimaan. Voisitteko antaa jonkun esimerkki koodin miten sitä käytetään? Mulla tulee täläisiä virheitä: "expected identifier before '-' token" , " expected `,' or `...' before '-' token", "ISO C++ forbids declaration of `parameter' with no type".

Pistä virheilmoituksesta muutama ensimmäinen rivi ja sitten koodinpätkä niiltä riveiltä mistä tulee virheitä.

PFe2005 [13.03.2005 13:06:34]

#

Tossa on koko virhe ilmoitus:"expected identifier before '-' token, expected `,' or `...' before '-' token, ISO C++ forbids declaration of `parameter' with no type, [Warning] unknown escape sequence '\H'. Ja tossa on rivit jossa on ongelmia:

int Mix_PlayChannel(int kanava, Mix_Chunk *aani, int toistokerrat);
int main(int argc, char *argv[]) {


    if( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 ) {
    fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError());
    return 1;
}
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1) {
    fprintf(stderr, "SDL_Mixerin alustus ei onnistunut.");
}
Mix_Chunk *aani;
aani=Mix_LoadWAV_RW(SDL_RWFromFile("Soundit\Horror.wav", "rb"), 0);

    if(Mix_PlayChannel(0, aani, 1)==-1){
        fprintf(stderr, "Virhe : %s \n", Mix_GetError());
}

Gaxx [13.03.2005 13:20:36]

#

Rivi

aani=Mix_LoadWAV_RW(SDL_RWFromFile("Soundit\Horror.wav", "rb"), 0);

pitää muuttaa muotoon

aani=Mix_LoadWAV_RW(SDL_RWFromFile("Soundit\\Horror.wav", "rb"), 0);

merkkijonoissa '\\' vastaa '\':ta. Muuten se tulkitaan '\H':na, joka ei ole mikään "käsky" toisin kuin '\n'(rivin vaihto).

Ja eikös kääntäjäsi näytä rivinumeroita?

PFe2005 [14.03.2005 15:55:12]

#

Ei toimi. Tossa se vika on :

int Mix_PlayChannel(int kanava, Mix_Chunk *aani, int toistokerrat);

Virheitä ovat sueraavat: expected identifier before '-' token expected `,' or `...' before '-' token ja ISO C++ forbids declaration of `parameter' with no type.

Gaxx [14.03.2005 17:28:34]

#

Veikkaisin, että sulla on koodia ennen ton funktion määrittelyä ja se vika löytyy sieltä?

Linkku [14.03.2005 18:19:50]

#

PFe2005 kirjoitti:

Ei toimi. Tossa se vika on :

int Mix_PlayChannel(int kanava, Mix_Chunk *aani, int toistokerrat);

Virheitä ovat sueraavat: expected identifier before '-' token expected `,' or `...' before '-' token ja ISO C++ forbids declaration of `parameter' with no type.

Eli veikkaisin että tuo ei ole se virherivi, koska virherivillä pitäisi olla "-".

rutkis [15.03.2005 08:55:47]

#

Luultavasti sinulta puuttuu include jossa on esitelty "Mix_Chunk" ja siten kääntäjä ei löydä sitä. Ihan villinä veikkauksena tämän kohdan perusteella: "ISO C++ forbids declaration of `parameter' with no type.".

PFe2005 [15.03.2005 15:57:40]

#

Mulla on alussa: #include <SDL/SDL.h> ja #include <SDL/SDL_Mixer.h> Voisitteko antaa jonkun lyhyen esimerkki koodin joka käyttää SDL Mixeriä koska siinä samassa kohdassa tulee aina virhe vaikka sen änkee minne vaan?

Heikki [15.03.2005 18:14:44]

#

Kokeileppa tätä koodivinkkiä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta