I simply want my player to jump on collision with the floor. I can’t get SDL_HasIntersection() to work.
Here’s my Game.cpp file:
#include "Game.h"
#include "TextureManager.h"
#include <iostream>
#include <map>
using namespace std;
SDL_Renderer* gRenderer = nullptr; // ~ this is a definition
TextureManager* manager = nullptr;
// HORIZONTAL MOVEMENT
const float speed = 2;
float right_accel = 0.0;
float left_accel = 0.0;
float x_shift = 0;
int c = 2;
int var = 0;
int y_shift = 0;
map<string, SDL_Rect> texture_list{};
map<string, SDL_Rect> wall_list{};
void Game::init(const char* title, int xpos, int ypos, int width, int height, int flags) {
if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
mWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
if (mWindow != NULL) {
gRenderer = SDL_CreateRenderer(mWindow, -1, 0);
isRunning = true;
}
}
manager = new TextureManager();
}
void Game::handleEvents() {
SDL_Event event; // SDL_Event class can only ever have one object
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
isRunning = false;
break;
}
}
}
void Game::update() {
manager->Update();
if (SDL_GetKeyboardState(0)[SDL_GetScancodeFromKey(SDLK_a)]) {
right_accel = 0;
x_shift -= speed + left_accel;
left_accel += 2;
}
else {
if (left_accel > 0) {
left_accel -= 0.5;
}
}
if (SDL_GetKeyboardState(0)[SDL_GetScancodeFromKey(SDLK_d)]) {
left_accel = 0;
x_shift += speed + right_accel;
right_accel += 2;
}
else {
if (right_accel > 0) {
right_accel -= 0.5;
}
}
}
void Game::render() {
SDL_RenderClear(gRenderer);
// --------------------------
manager->drawTexture("assets/doux/doux_00.png", 350, 265, "player");
manager->drawRect(250, 320, 400, 50, "floor");
manager->drawRect(200, 250, 50, 70, "left");
manager->drawRect(650, 250, 50, 70, "right");
if (SDL_HasIntersection(&texture_list["player"], &wall_list["floor"])) {
texture_list["player"].y -= 40;
}
// --------------------------
SDL_SetRenderDrawColor(gRenderer, 64, 64, 64, 1);
SDL_RenderPresent(gRenderer);
}
void Game::clean() {
SDL_DestroyWindow(mWindow);
SDL_DestroyRenderer(gRenderer);
SDL_Quit();
}
SDL_HasIntersection() doesn’t detect collision in my case, what did I do wrong?
Thnak you for your attention!