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] 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){