Can't get SDL_HasIntersection() to work

Here’s my Game.cpp file:

#include "Game.h"
#include <iostream>
#include <SDL.h>
using namespace std;

SDL_Window* gWindow = nullptr;
SDL_Renderer* gRenderer = nullptr;

int speed = 8;
int accel = 0;
int x_shift = 0;

void Game::init(const char* title ,int x, int y, int w, int h, int flags) {
	if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {

		// create window
		gWindow = SDL_CreateWindow(title, x, y, w, h, flags);

		if (gWindow != NULL) {

			// create renderer
			gRenderer = SDL_CreateRenderer(gWindow, -1, 0);

			isRunning = true;
		}
		else {
			isRunning = false;
		}
	}
	else {
		isRunning = false;
	}
}

void Game::handleEvent() {

	SDL_Event event;

	while (SDL_PollEvent(&event)) {

		if (event.type == SDL_QUIT) {

			isRunning = false;
		}

		if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_d) {
			x_shift += speed * accel;
			accel++;
		}
	}
}

void Game::update() {
}

void Game::render() {
	SDL_RenderClear(gRenderer);
	// ------------------------------------------
	SDL_Rect player;
	player.x = 250;
	player.x += x_shift;
	player.y = 300;
	player.w = 40;
	player.h = 70;

	SDL_SetRenderDrawColor(gRenderer, 225, 6, 0, 0);
	SDL_RenderFillRect(gRenderer, &player);
	SDL_RenderDrawRect(gRenderer, &player);

	SDL_Rect floor1;
	floor1.x = 200;
	floor1.y = 400;
	floor1.w = 200;
	floor1.h = 50;

	SDL_SetRenderDrawColor(gRenderer, 230, 192, 134, 0);
	SDL_RenderFillRect(gRenderer, &floor1);
	SDL_RenderDrawRect(gRenderer, &floor1);

	SDL_Rect floor2;
	floor2.x = 500;
	floor2.y = 250;
	floor2.w = 200;
	floor2.h = 50;

	SDL_SetRenderDrawColor(gRenderer, 230, 192, 134, 0);
	SDL_RenderFillRect(gRenderer, &floor2);
	SDL_RenderDrawRect(gRenderer, &floor2);

	if (SDL_HasIntersection(&player, &floor1)); {
		cout << "hello" << " ";
	}
	
	// ------------------------------------------
	SDL_SetRenderDrawColor(gRenderer, 0, 0, 0, 1);
	SDL_RenderPresent(gRenderer);
}

void Game::clean() {
	SDL_DestroyWindow(gWindow);
	SDL_DestroyRenderer(gRenderer);
	SDL_Quit();
}

SDL_HasIntersection() doesn’t work as intended for me, and prints “hello” regardless of whether the player and floor touch each other or not. Where did I go wrong?

if (SDL_HasIntersection(&player, &floor1)); {
	cout << "hello" << " ";               ^
}                                         |
                                          |
                                 REMOVE THIS SEMICOLON
2 Likes

Thank you, that’s silly of me…