Forum huvudsida -> Programmering -> SDL collision!
Sidor: 1
lord_slampa | 21:34 - 4:e Januari 2007 | Post #1 | |
Medlem Inlägg: 46 Skicka PM |
ngån som vet hur man gör en collision i SDL? vore tacksam med hjälp. ------------------------- DirectX + Win32 Api For the win! |
Independence | 21:53 - 4:e Januari 2007 | Post #2 | |
Administratör Inlägg: 1800 Skicka PM |
För enkelhets skull så kan man anta att objekten är fyrkantiga, det stämmer inte så ofta men det brukar ändå vara tillräckligt noggrant för de flesta spel. Sedan tar man reda på x och y värde samt höjd och bredd på de två objekten som man vill se om de krockar. Nästa steg är en lång if-sats, som jag troligtvis kommer ihåg fel, men jag ska göra ett försök obj1.x1 obj1.x2 obj1.y1 obj1.y2 obj2.x1 obj2.x2 obj2.y1 obj2.y2 Det där är de två objektens kordinater. Sedan kan man kolla om ett hörn i obj2 ligger inuti obj1 såhär typ:
Sedan upprepar man det för alla hörn tror jag. Det borde iaf fungera, men man kanske brukar göra på något annat sätt ------------------------- Vi är riddarna som säger fiskbulle! Senast redigerad 23:10 - 4:e Januari 2007 |
lord_slampa | 22:20 - 4:e Januari 2007 | Post #3 | |
Medlem Inlägg: 46 Skicka PM |
okej. det fungerar inte för mig. det är hel totalt cp. jag lyckas få en collision! och det är total fel! #include "SDL/SDL.h" #include "SDL/SDL_image.h" const int screenW = 800; const int screenH = 600; const int screenBPP = 32; SDL_Surface *box1 = NULL; SDL_Surface *Player_IMG = NULL; SDL_Surface *screen = NULL; SDL_Event event; int xVel = 0; int yVel = 0; int x = 0; int y = 0; int w = 32; int h = 64; SDL_Surface *IMG(const char* file_name) { SDL_Surface *Image = NULL; Image = IMG_Load(file_name); SDL_Surface *OptiImage = NULL; if(Image != NULL){ OptiImage = SDL_DisplayFormat(Image); SDL_FreeSurface (Image); } return OptiImage; } void Apply_Surface(int x, int y, SDL_Surface *Källa,SDL_Surface *Mål) { SDL_Rect offset; offset.x = x; offset.y = y; SDL_BlitSurface(Källa,NULL,Mål,&offset); } void Player_Input() { if(event.type == SDL_KEYDOWN) { switch(event.key.keysym.sym) { case SDLK_UP: yVel -= 2; break; case SDLK_DOWN: yVel +=2; break; case SDLK_LEFT: xVel -=2; break; case SDLK_RIGHT: xVel +=2; break; } }else if (event.type == SDL_KEYUP) { switch(event.key.keysym.sym) { case SDLK_UP: yVel +=2; break; case SDLK_DOWN: yVel -=2; break; case SDLK_LEFT: xVel +=2; break; case SDLK_RIGHT: xVel -=2; break; } } } void Player_Show() { x+=xVel; if((x<0)||( x + w > screenW)) { x-=xVel; } y+=yVel; if((y<0)||( y + h > screenH)) { y-=yVel; } Player_IMG = IMG("Player2.png"); Apply_Surface(x,y,Player_IMG,screen); SDL_UpdateRect(screen,0,0,0,0); } void Player() { Player_Input(); Player_Show(); } struct Block() { box1 = IMG("box.png"); Apply_Surface(boxx,boxy,box1,screen); int boxx = 100; int boxy = 100; int boxxvel = 100; int boxyvel = 100; int boxw = 64; int boxh = 64; } void Collision() { if(x <= boxx && w >= boxw) { x-=xVel; } if(y <= boxy && h >= boxh) { y-=yVel; } } int main(int argc, char *argv[]) { SDL_Init(SDL_INIT_EVERYTHING); screen = SDL_SetVideoMode(screenW,screenH,screenBPP,SDL_SWSURFACE); while(1) { while(SDL_PollEvent(&event)) { Collision(); Player(); { if(event.type == SDL_QUIT) { SDL_Quit(); return 0; } } } } SDL_Flip(screen); SDL_Delay(2000); SDL_Quit(); return 0; } ------------------------- DirectX + Win32 Api For the win! |
Independence | 22:23 - 4:e Januari 2007 | Post #4 | |
Administratör Inlägg: 1800 Skicka PM |
Hmm, fast nu har du ju inte gjort i närheten av det jag sa Du ska inte jämföra med w, utan x+w. Sedan gör du bara två jämförelser istället för fyra i if-satsen. ------------------------- Vi är riddarna som säger fiskbulle! |
lord_slampa | 22:29 - 4:e Januari 2007 | Post #5 | |
Medlem Inlägg: 46 Skicka PM |
jag hänger ärligt talat inte med alls. ska jag ta "playerns" x och Lådans w? sedan "playerns" y och lådans h? ------------------------- DirectX + Win32 Api For the win! |
Sidor: 1
Forum huvudsida -> Programmering -> SDL collision!
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-02 19:44
Vecka: 18
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.