From 556ccd976ec42c35485036bc6a91d752287cad14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=B2sweg?= Date: Sun, 30 Apr 2017 18:23:47 +0200 Subject: [PATCH 1/2] Collision detection (needs some improvement) --- Makefile | 9 ++++++--- bin/main | Bin 17688 -> 18100 bytes block.cpp | 24 +++++++++++++++--------- block.h | 5 ++++- camera.cpp | 19 +++++++++++++++++++ camera.h | 15 +++++++++++++++ main | Bin 17724 -> 0 bytes main.cpp | 50 +++++++++++++++++++++++++------------------------- player.cpp | 7 +++++-- player.h | 2 +- 10 files changed, 90 insertions(+), 41 deletions(-) create mode 100644 camera.cpp create mode 100644 camera.h delete mode 100644 main diff --git a/Makefile b/Makefile index 6b770fb..5fd8d73 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ #-*- Makefile -*- -OBJS = main.o player.o dt.o block.o entity.o +OBJS = main.o player.o dt.o block.o entity.o camera.o CC = g++ @@ -17,14 +17,17 @@ all: $(OBJS) main.o: main.cpp $(CC) -c main.cpp $(LINKER_FLAGS) -player.o: player.cpp player.h entity.h +player.o: player.cpp player.h entity.o $(CC) -c player.cpp -lm $(LINKER_FLAGS) dt.o: dt.cpp dt.h $(CC) -c dt.cpp $(LINKER_FLAGS) -block.o: block.cpp block.h entity.h +block.o: block.cpp block.h entity.o $(CC) -c block.cpp $(LINKER_FLAGS) entity.o: entity.cpp entity.h $(CC) -c entity.cpp $(LINKER_FLAGS) + +camera.o: camera.cpp camera.h + $(CC) -c camera.cpp diff --git a/bin/main b/bin/main index a7aec385b2a699844aadf9cdd890d96d62d3cde0..8a7c6497eadf78a08a3e95dfbf9cc10f053e88b3 100755 GIT binary patch delta 6648 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 delta 5704 zcmb7IeOOdg8b5dD&Ugn#7(NOGWJXjZHKfGCM{S3XK}%Lg1!Ff_v4tF16e@7r9&=z( za~!9zgJoim^s$@u^x+1YC7TomQ9XUSuI}2#mbEt{!=f+4?*86;=MLjM&;GGzo^#*% zo%iFs=Y7xDy{Is@)Rv0s zK+SjkZRp4+_iuc9$tOKE-aQ)+2hPWwx~(kr><3@P@DZWX@QT2HZMe?xqrmqVvJ7tu z{0&1|yqQb}OFXD7@F?ST@%!MTUZ}ZW;5Ejj-U*Pd?GYtn+1Nxj6S(jd9VfF>P!lm4 z5&SqvB!GW?K$M;Uj%P7!3#fdLCLhnDnf(%b$?SIMpV_1HW7$2x^#~)>pwBvQ6t@ff zT5}e!GjB4Nm93tWmBasIo?JkDy}+beC}vv3L}pU|Q|xpuW5OjrGv7BZ$!liWK>>jo z**oan22CewVs-U+20IJDr#734MOGBVci5{f3_9+RzQA4x>O(vzZ&2k4j~*2za}r}# zL~|U;5#<-hWqUE$Sp;A%n`jhcIYgrw%Oz@MYynZY<0Kk`6cCMNY%x)IS4rAbAD;$Ef7^ zK_tf0gvat#9!jdbj6WMS<(fJexsoPD%Ma!a$%koh(2OhfecCdV=plykZp$&-z&E|E zfrborm|Cu^<>R8$XRFNjH74-_-P1|EX<-v&SYv`}Ly|YbnLblf4=;;eCQRe|qaEG} zm}GL@MMY^j=6I|F(vQ%iWk{?s*C=k;rE+YKJx&~YvbZzXpPex3=)iN}dYz}4oKS0LpWFLcm9QbsbF9uLWMptFFh%Pr3i z$wZ0_t0KqUvNcj9)6;}m>p2WVHO%9{dX{C(GIT{@>%kD^8VF$Qfh{G-Maz&^3Y503 zaLZ4trmPTC4pxAp94uF#W$Ke;HT6T-v|uiJW$#N?e$^W^{Pg#`t+zz64kWt z)U_MXq-uMQLp^&;y|GC-NV7yac&GX#K}~mIP}j8?it5RyN~i#7hM&o$$S@Wn~F4Mx9sQ@$QVU3UIbxOiF6#Y}kU|K;caPq9s!bJ0 zQorlW>ma90v)Vg1#~Y1?>~`+E>aTaqRi zC+ATh=bl$vLxH45Es*|U-kO@u|C%f%y)&#RK9}q(9r|dU+;aC2`-Ak)E1m89bn?`s zw*SFPN^uAmxsZ}*fZ)=Ul#F6*bEgJA`uxL_8z_#aOlm_Jh3k}48t84syj!)B55#3w z{2v(^%S3QXQW{g`XTG9AIba!c)J-ivol}R|8mRi=rr+GmE0U8Z=hN^vsgkzP@TpN7 z{_%4d{+h`JBsHpOhoq=clUhMi>6345ExmEoO8Ht?YwrF1G^BFK>aU&Z2y~8MPnH*b z$-R?qkUoH!=H7&9{JlwQy@N;{?o6zENKr;XNw)$^Vi9N)Xg_ENXf)#61NtozH3+)* zYelhQ2RjEk3sgc{9cYgMb%MGJ!lu`KfYI#;|8{x?ZPfUf`-3? zCgOteHE0fKI+kDw=*yrDpv4%$UeJ3%yFvGZo(6pzbQIKvb(M=Q|11U;;u}8`NFWnU4DI6)Ai9&WLaV?Q*-VB;RuF4!+-Nqmp&{?J0?5+6 zau#H_L3RbnhWc8{S34}GV(?z#>l`WGTKpS@)KlS7`CE-GqT$iryuLi@nXI)zZWB_n zBwWt0DCBt;_)meaUIO&qeyg(8ksSyBdGKoy!H_pb&oZOl!3YF?M$V4VQr8U_Ul4VE zB2xDdc82_L2R4m$kOTgaANhL6~Vv%|$}$HW`J?*qR*oNstg6_|>)Ht_SY z#oZgu*W$7@JTBdk+YhJ2b zi8ksNp$^qM0SMEDmndB&amK1weH_xb((@U!v*K)xEr>D7aJ!yQ(oSUz@&sk}bB)k|){CNA;X>jJr}VR9NTKIllp<5WzJ zXjmnx!y3lb9fby>VH)h%i;od6K2&VzoTyQa6o zIE?oS+HA;;9AKJ#+KX=tTSA6|MP%odXBnHrG9w(Ivsib441WF~rZAMq;40vmyZNhg zvb^pHH9Et>)jBZSbu}LtH2ZZwx=Aotf_|{&5%%b`3%8e!m80A17uak@OG!5vW{;7< z^Jo~}r^h>ahL2Kj`S05hbO^aVD7 ztsxvNw9xK|z*{fHUiRRn4Xh&qKM(B3yt2UhJL0=2{Bjis4r}#yQ<{Qbs zf|*holy^Y>WAMkmCU|Y^JQ|9y7tw}H3P#!kf`vwq1nfZM9rz!IiJL}zM2u!2eU6w0 zoW(_n&Ii(W0*8N|Z~@cnPH|AbnDm1s-itr0(Li@+YKt>WWCh4n2e8&bGNY5})%!$= zD0Q$2v>g#?f;{1Sfb~KSpMd@-rWWnw#NQRce-1m5zUsa4SoY6BU@1DFBa{@51NUHQ zlLPUF7Xj6YF;HwT&{%x34(<2nF0oDsS za1$_nCAk^@$-wU-_;&$^JLC)FJD~F?VEWX8aj5zSfoak&)n|Qwgu)46dZ(m;(X1bg z;9m&COdb41AUacRlo9@KAUaWN;Y}g86xhvlo*ppstb%k4o&DK3WhMTr z0=tC{(p;beycvjQj|?=0=jA8x?gFcY4pJM|WIcbcz+u8_XtMC{3Z`V^Un`E{720Wt zky8S-@(2i=Vl*pgft|r#oTwTsFSMG~gEfV(FHE7@k7h0oo_re=o!@7<9 z)xvW)UH{^;TWCgBB0-WWHsrFIYk`h2ZYW9@YWcLH>4uzN@TEl=<2%q^0cX?Da}jSY SN}0gs;R_!*5-j8wmHz@xkj?!7 diff --git a/block.cpp b/block.cpp index 39eacb6..9dbcad4 100644 --- a/block.cpp +++ b/block.cpp @@ -1,13 +1,19 @@ #include"block.h" -void Block::print(int x, int y, int w, int h,SDL_Renderer* renderer){ - posX = x; - posY = y; - szW = w; - szH = h; - - rect = {posX, posY, szW, szH}; +Block::Block(int x, int y, int w, int h,SDL_Renderer** render){ + //set the rectangle dimensions + rect = {x,y,w,h}; - SDL_SetRenderDrawColor(renderer,0,0xFF,0,0xFF); - SDL_RenderFillRect(renderer,&rect); + //Set the renderer pointer + renderer = render; } + +void Block::print(int cameraX){ + //New SDL_Rect to make the objects follow the camera + SDL_Rect cameraFix = rect; + cameraFix.x -= cameraX; + + //Set render color and render the rectangle + SDL_SetRenderDrawColor(*renderer,0,0xFF,0,0xFF); + SDL_RenderFillRect(*renderer,&cameraFix); +}; diff --git a/block.h b/block.h index 3a25f77..b09dc48 100644 --- a/block.h +++ b/block.h @@ -11,7 +11,10 @@ class Entity; class Block: public Entity{ public: - void print(int x,int y,int w,int h,SDL_Renderer* renderer); + Block(int x,int y,int w,int h,SDL_Renderer** render); + void print(int cameraX); + private: + SDL_Renderer** renderer; }; #endif diff --git a/camera.cpp b/camera.cpp new file mode 100644 index 0000000..fd0a6c2 --- /dev/null +++ b/camera.cpp @@ -0,0 +1,19 @@ +//Camera class body + +#include"camera.h" + +void Camera::update(int playerX, int playerY){ + //Make the camera when the player hits the middle of the screem + if(true) posX = playerX - 640/2; + //else posX = 0; + + //posY = playerY; +}; + +int Camera::getPosX(){ + return posX; +}; + +int Camera::getPosY(){ + return posY; +}; diff --git a/camera.h b/camera.h new file mode 100644 index 0000000..b1caa0a --- /dev/null +++ b/camera.h @@ -0,0 +1,15 @@ +//Camera class header + +#ifndef __CAMERA_H_INCLUDED__ +#define __CAMERA_H_INCLUDED__ + +class Camera{ + public: + void update(int playerX, int playerY); + int getPosX(); + int getPosY(); + private: + int posX, posY; +}; + +#endif diff --git a/main b/main deleted file mode 100644 index f2406e4ba1144b2d658a198dbeebe780601f2d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17724 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 #include"player.h" #include"block.h" +#include"camera.h" const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; @@ -17,10 +18,9 @@ const int sz = SCREEN_WIDTH/16; void init(); bool loadMedia(); void close(); -void gameLoop(); Player posweg; -Block ground; +Camera camera; bool loadMedia(){ bool success = true; @@ -46,28 +46,6 @@ void close(){ SDL_Quit(); } -void gameLoop(){ - SDL_SetRenderDrawColor(gRenderer,0,0,0,0xFF); - SDL_RenderClear(gRenderer); - - Block wallA; - Block wallB; - Block wallC; - wallA.print(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,gRenderer); - wallB.print(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,gRenderer); - wallC.print(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,gRenderer); - ground.print(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,gRenderer); - posweg.print(); - - - posweg.check(wallA.getRectangle()); - posweg.check(wallB.getRectangle()); - posweg.check(wallC.getRectangle()); - posweg.check(ground.getRectangle()); - - SDL_RenderPresent(gRenderer); -} - int main(int argc, char* args[]){ init(); loadMedia(); @@ -75,6 +53,11 @@ int main(int argc, char* args[]){ bool quit = false; SDL_Event e; + Block wallA(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,&gRenderer); + Block wallB(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer); + Block wallC(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer); + Block ground(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer); + posweg.init(100,100,sz,sz,&gRenderer); while(!quit){ @@ -83,8 +66,25 @@ int main(int argc, char* args[]){ quit = true; } } + SDL_SetRenderDrawColor(gRenderer,0,0,0,0xFF); + SDL_RenderClear(gRenderer); - gameLoop(); + camera.update(posweg.getRectangle().x,posweg.getRectangle().y); + + posweg.print(camera.getPosX()); + std::cout << posweg.getRectangle().x << std::endl; + + wallA.print(camera.getPosX()); + wallB.print(camera.getPosX()); + wallC.print(camera.getPosX()); + ground.print(camera.getPosX()); + + posweg.check(wallA.getRectangle()); + posweg.check(wallB.getRectangle()); + posweg.check(wallC.getRectangle()); + posweg.check(ground.getRectangle()); + + SDL_RenderPresent(gRenderer); } close(); return 0; diff --git a/player.cpp b/player.cpp index f392409..7a47573 100644 --- a/player.cpp +++ b/player.cpp @@ -2,11 +2,14 @@ #include"player.h" -void Player::print(){ +void Player::print(int cameraX){ rect = {posX,posY,szW,szH}; + SDL_Rect cameraFix = rect; + cameraFix.x -= cameraX; + SDL_SetRenderDrawColor(*renderer,0xFF,0,0,0xFF); - SDL_RenderFillRect(*renderer, &rect); + SDL_RenderFillRect(*renderer, &cameraFix); oldPosX = posX; oldPosY = posY; diff --git a/player.h b/player.h index 8bfc399..18e6505 100644 --- a/player.h +++ b/player.h @@ -13,7 +13,7 @@ class Entity; class Player: public Entity{ public: - void print(); + void print(int cameraX); int check(SDL_Rect rectB); void init(int x, int y,int w, int h,SDL_Renderer** render); //SDL_Rect getRectangle(); From e0508c2a4439add3d86c7eac0feea39cfc124848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=B2sweg?= Date: Sun, 30 Apr 2017 21:23:48 +0200 Subject: [PATCH 2/2] Collision detection (much better and finished) --- Makefile | 2 +- bin/main | Bin 18100 -> 18120 bytes camera.cpp | 10 ++++++++-- camera.h | 2 ++ main.cpp | 12 ++++++++---- player.cpp | 3 ++- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 5fd8d73..0b81356 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ CC = g++ COMPILER_FLAGS = -w -LINKER_FLAGS = -lSDL2 -std=gnu++11 +LINKER_FLAGS = -lSDL2 -std=gnu++11 -lSDL2_image OBJ_NAME = bin/main diff --git a/bin/main b/bin/main index 8a7c6497eadf78a08a3e95dfbf9cc10f053e88b3..474b12f7f88b6a8076bce57455ca76d53e936895 100755 GIT binary patch delta 4934 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 scW/2) posX = playerX - scW/2; + else posX = 0; + if(playerX >= mW - scW/2) posX = mW - scW; //posY = playerY; }; diff --git a/camera.h b/camera.h index b1caa0a..ac3c657 100644 --- a/camera.h +++ b/camera.h @@ -5,11 +5,13 @@ class Camera{ public: + Camera(int mapWidth,int screenWidth); void update(int playerX, int playerY); int getPosX(); int getPosY(); private: int posX, posY; + int mW, scW; }; #endif diff --git a/main.cpp b/main.cpp index b9040e0..96c6681 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,7 @@ #include #include +//#include #include"player.h" #include"block.h" #include"camera.h" @@ -19,9 +20,6 @@ void init(); bool loadMedia(); void close(); -Player posweg; -Camera camera; - bool loadMedia(){ bool success = true; @@ -52,11 +50,15 @@ int main(int argc, char* args[]){ bool quit = false; SDL_Event e; + + Player posweg; + Camera camera(36*sz,SCREEN_WIDTH); Block wallA(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,&gRenderer); Block wallB(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer); Block wallC(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer); Block ground(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer); + Block ground2(SCREEN_WIDTH+sz*4,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer); posweg.init(100,100,sz,sz,&gRenderer); @@ -78,12 +80,14 @@ int main(int argc, char* args[]){ wallB.print(camera.getPosX()); wallC.print(camera.getPosX()); ground.print(camera.getPosX()); + ground2.print(camera.getPosX()); posweg.check(wallA.getRectangle()); posweg.check(wallB.getRectangle()); posweg.check(wallC.getRectangle()); posweg.check(ground.getRectangle()); - + posweg.check(ground2.getRectangle()); + SDL_RenderPresent(gRenderer); } close(); diff --git a/player.cpp b/player.cpp index 7a47573..ba1584d 100644 --- a/player.cpp +++ b/player.cpp @@ -3,7 +3,6 @@ #include"player.h" void Player::print(int cameraX){ - rect = {posX,posY,szW,szH}; SDL_Rect cameraFix = rect; cameraFix.x -= cameraX; @@ -96,6 +95,8 @@ void Player::move(){ //Convert and set new int position posX += static_cast(x); posY -= static_cast(y+0.5); + + rect = {posX,posY,szW,szH}; }; int Player::check(SDL_Rect rectA){