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?