nahoy Skrevet 22. august 2005 Del Skrevet 22. august 2005 Jeg har begynt å programmere et snake-spill i c++/sdl Dessverre har jeg støtt på et problem: Å vise tekst på skjermen Virker som det ikke følger med noen egnet funkskjon i sdl, hva skal jeg gjøre? Lenke til kommentar
☀ ❄ Skrevet 23. august 2005 Del Skrevet 23. august 2005 Som du har i topic -- ved å bruke SDL_ttf? Det er skrevet av Sam og er en av standard-utvidelsene til SDL, så det er praktisk talt innebygget. Se her for dokumentasjon, og se om du kan stille et litt mer konkret spørsmål hvis du fortsatt lurer på noe, så er det litt lettere å hjelpe deg Lenke til kommentar
nahoy Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 Hadde egentlig tenkt til å spørre om dette: Hvordan bruker/installerer man SDL_TTF Men så tenkte jeg at det kanskje også finnes andre måter som er bedre/lettere.. Lenke til kommentar
☀ ❄ Skrevet 23. august 2005 Del Skrevet 23. august 2005 Du laster ned denne filen, legger SDL_ttf.h i include-mappen din, SDL_ttf.lib i lib-mappen din og SDL_ttf.dll i en mappe som leses når filen kjøres (f.eks. C:\Windows\system32, hvis jeg ikke husker galt). Det er mulig at .lib-filer for Visual C++ og Dev-C++ er forskjellige -- i så fall kan du se om det finnes et konverteringsprogram, eller du kan kompilere selv. Lenke til kommentar
nahoy Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 Jeg har lagt alle filene oppi lib of include-mappen, men jeg får bare masse undefined reference -feil Lenke til kommentar
☀ ❄ Skrevet 23. august 2005 Del Skrevet 23. august 2005 Husker du å linke dem inn? Legg til "-lSDL_ttf" (uten anførselstegnene) under linker commands på Project->Options Lenke til kommentar
nahoy Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 Tror det skulle virke nå. Det jeg trenger nå er et enkelt program som demonstrerer om og hvordan det virker. Lenke til kommentar
nahoy Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 Fant et eksempel, nå virker alt som det skal. Takk for hjelpen. Lenke til kommentar
nahoy Skrevet 23. august 2005 Forfatter Del Skrevet 23. august 2005 Her er foreløpige spillet, men med mange mangler: www.home.no/bobbaluba/Bendelormer-Alpha2.zip trykk 1 for 1-player osv. 2p styres med joystick Lenke til kommentar
Mr.Garibaldi Skrevet 23. august 2005 Del Skrevet 23. august 2005 (endret) Når jeg starter spillet får jeg opp en en farget skjerm med noe som ser ut som et lite kirsebær. Når jeg så trykker på 1 eller 2 kommer det en blinkende strek som beveger seg øverst i venstre hjørne før applikasjonen avsluttes... Win2k SP4, DX9.0c... Legger ved DrWatsons log bendel_error_log.txt Endret 23. august 2005 av Mr.Garibaldi Lenke til kommentar
☀ ❄ Skrevet 23. august 2005 Del Skrevet 23. august 2005 Hadde du lagt ut kildekoden også, kunne de av oss som bruker andre plattformer dra nytte av SDLs plattformuavhengighet Lenke til kommentar
nahoy Skrevet 26. august 2005 Forfatter Del Skrevet 26. august 2005 #include <stdio.h> #include <stdlib.h> #include <ctime> #include <SDL/SDL.h> int eple[2] = { 200, 200 }; int ormlengde[3]={10, 10, 10}; int tempretning[3]={3, 3, 3}; int orm[3][2][100000] = {{{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 }, { 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 }}, {{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 }, { 460,460,460,460,460,460,460,460,460,460,460 }}, {{ 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20 }, { 240,240,240,240,240,240,240,240,240,240,240 }}}; int ormfarge[3][3]={ {50,50,255}, {0,255,0}, {255,50,50} }; // 0 = opp, 1 = ned, 2 = venstre, 3 = høyre int retning[3]={3, 3, 3}; int done=0; int skritt; int epleverdi=10; int players=0; void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B) { Uint32 color = SDL_MapRGB(screen->format, R, G, B); switch (screen->format->BytesPerPixel) { case 1: // Assuming 8-bpp { Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x; *bufp = color; } break; case 2: // Probably 15-bpp or 16-bpp { Uint16 *bufp; bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x; *bufp = color; } break; case 3: // Slow 24-bpp mode, usually not used { Uint8 *bufp; bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3; if(SDL_BYTEORDER == SDL_LIL_ENDIAN) { bufp[0] = color; bufp[1] = color >> 8; bufp[2] = color >> 16; } else { bufp[2] = color; bufp[1] = color >> 8; bufp[0] = color >> 16; } } break; case 4: // Probably 32-bpp { Uint32 *bufp; bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x; *bufp = color; } break; } } void Slock(SDL_Surface *screen) { if ( SDL_MUSTLOCK(screen) ) { if ( SDL_LockSurface(screen) < 0 ) { return; } } } void Sulock(SDL_Surface *screen) { if ( SDL_MUSTLOCK(screen) ) { SDL_UnlockSurface(screen); } } void DrawScene(SDL_Surface *screen) { Slock(screen); for(int x=0;x<640;x++) { for(int y=0;y<480;y++) { DrawPixel(screen, x,y,x/3,50,y/2); } } //nå tegnes bendelormen(e) for(int p=0; p<players; p++) { for(int i=0; i<=ormlengde[p]; i++) { DrawPixel(screen, orm[p][0][i], orm[p][1][i], ormfarge[p][0], ormfarge[p][1], ormfarge[p][2]); } } //så tegnes "eplet" for(int j=0; j<5; j++) { for(int i=0; i<5; i++) { if (!((i==0 || i==4) && (j==0 || j==4))) { DrawPixel(screen, (eple[0]+i), eple[1]+j, 255, 0, 0); } } } DrawPixel(screen, (eple[0]+2), eple[1]-1, 0, 150, 0); DrawPixel(screen, (eple[0]+2), eple[1]-2, 0, 150, 0); //DrawPixel(screen, (eple[0]+2), eple[1]-3, 0, 255, 0); //slutt på epletegning Sulock(screen); SDL_Flip(screen); } void ormflytt(int p) { for(int i=ormlengde[p]; i>=1; i--) { orm[p][0][i]=orm[p][0][(i-1)]; orm[p][1][i]=orm[p][1][(i-1)]; } } //plasser sier om ormen skal bli lengre eller om det bare skal plasseres et eple //p betyr spiller 0=spiller1 1=spiller2 void eplespist(int plasser=0, int p=0) { if (!plasser){ ormlengde[p]+=epleverdi; } eple[0]=(rand()%637); eple[1]=(rand()%477); } // 0 returnet betyr kollidering, ulogisk, men slik var det lettest å få til bool kollisjonsdetektor(int p) { if (orm[p][0][0]<0 || orm[p][0][0]>=640 || orm[p][1][0]<0 || orm[p][1][0]>480) { return 0; } for(int c=0; c<players; c++) { for(int g=1; g<ormlengde[p]; g++) { if (orm[c][0][g]==orm[p][0][0] && orm[c][1][g]==orm[p][1][0]){ return 0; } } } } int main(int argc, char *argv[]) { srand(time(0)); Uint8* keys; if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_JOYSTICK|SDL_INIT_NOPARACHUTE) < 0 ) //test om noparachute er nødvendig! { printf("Unable to init SDL: %s\n", SDL_GetError()); exit(1); } //Joystick-greier fra internett SDL_JoystickEventState( SDL_ENABLE ); SDL_Joystick* mJoystick; mJoystick = SDL_JoystickOpen( 0 ); if ( mJoystick == NULL ) ; // error handling //slut på joystick-greier atexit(SDL_Quit); SDL_Surface *screen; screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); if ( screen == NULL ) { printf("Unable to set 640x480 video: %s\n", SDL_GetError()); exit(1); } //her starter tegningen eplespist(1); while(done == 0) { SDL_Event event; while ( SDL_PollEvent(&event) ) { if ( event.type == SDL_QUIT ) { done = 1; } if ( event.type == SDL_KEYDOWN ) { if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; } } } keys = SDL_GetKeyState(NULL); //tastatur1knapper int tast1=0; if ( keys[SDLK_UP]) { tempretning[tast1]=0; } if ( keys[SDLK_DOWN]) { tempretning[tast1]=1; } if ( keys[SDLK_LEFT]) { tempretning[tast1]=2; } if ( keys[SDLK_RIGHT]) { tempretning[tast1]=3; } int tast2=2; if ( keys[SDLK_w]) { tempretning[tast2]=0; } if ( keys[SDLK_s]) { tempretning[tast2]=1; } if ( keys[SDLK_a]) { tempretning[tast2]=2; } if ( keys[SDLK_d]) { tempretning[tast2]=3; } //epleverdi +- if ( keys[SDLK_o] ) { epleverdi+=1; } if ( keys[SDLK_l] ) { epleverdi-=1; } //1/2/3 spillere if ( keys[SDLK_1] && players==0 ) { players=1; }; if ( keys[SDLK_2] && players==0 ) { players=2; }; if ( keys[SDLK_3] && players==0 ) { players=3; }; //joystick-knapper int joy1=1; SDL_JoystickUpdate(); if(SDL_JoystickGetAxis( mJoystick, 1 )<0 ) { tempretning[joy1]=0; } if(SDL_JoystickGetAxis( mJoystick, 1 )>10000 ) { tempretning[joy1]=1; } if(SDL_JoystickGetAxis( mJoystick, 0 )<0 ) { tempretning[joy1]=2; } if(SDL_JoystickGetAxis( mJoystick, 0 )>10000 ) { tempretning[joy1]=3; } for(int p=0; p<players; p++) { if((retning[p]==0 && tempretning[p]!=1) || (retning[p]==1 && tempretning[p]!=0) || (retning[p]==2 && tempretning[p]!=3) || (retning[p]==3 && tempretning[p]!=2)) { retning[p]=tempretning[p]; } if ( !kollisjonsdetektor(p) ) { done=1; } //Er eplet spist? for(int j=0; j<5; j++) { for(int i=0; i<5; i++) { // eple[0]+2), eple[1]-1 if ((orm[p][0][0]==eple[0]+j) && (orm[p][1][0]==eple[1]+i) && !((i==0 || i==4) && (j==0 || j==4))) { eplespist(0, p); } } } if(retning[p]==0){ormflytt(p); orm[p][1][0]-=1;} if(retning[p]==1){ormflytt(p); orm[p][1][0]+=1;} if(retning[p]==2){ormflytt(p); orm[p][0][0]-=1;} if(retning[p]==3){ormflytt(p); orm[p][0][0]+=1;} //skritt+=1; } if (done == 0)DrawScene(screen); } SDL_JoystickClose(mJoystick); //her sluttern return 0; } Lenke til kommentar
genstian Skrevet 26. august 2005 Del Skrevet 26. august 2005 OFF: tror du har brukt denne guiden: http://cone3d.gamedev.net/cgi-bin/index.pl...ls/gfxsdl/index Lenke til kommentar
nahoy Skrevet 26. august 2005 Forfatter Del Skrevet 26. august 2005 OFF:tror du har brukt denne guiden: http://cone3d.gamedev.net/cgi-bin/index.pl...ls/gfxsdl/index Riktig, har lest de to første guidene og kopiert en god del fra dem. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå