Chciałem skorzystać z tej biblioteki i z funkcji PixelPerfectText, tlyko ja mam dwie klasy w ktorych sa spajty.
#pragma once
#include <SFML\Graphics.hpp>
class TBlocks:public sf::Drawable
{
public:
TBlocks(float t_X, float t_Y);
TBlocks()=delete;
virtual ~TBlocks() = default;
void update_block();
private:
void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
sf::Texture block_texture;
sf::Sprite blockSprite;
sf::Texture *bTexture = &block_texture;
std::string blocks[3];
};
#include "TBlocks.h"
#include "Collision.h"
#include <iostream>
#include <stdio.h>
#include <SFML\Graphics.hpp>
#include <stdlib.h>
#include <algorithm>
#include <random>
#include <time.h>
TBlocks::TBlocks(float t_X, float t_Y)
{
blocks[0] = "blocks/block_1.png";
blocks[1] = "blocks/block_2.png";
blocks[2] = "blocks/block_3.png";
//RANDOMOWE BLOKI
std::random_device rseed;
std::mt19937 rgen(rseed());
std::uniform_int_distribution<int> idist(0, 2);
int los = idist(rgen);
Collision::CreateTextureAndBitmask(block_texture, blocks[los]);
blockSprite.setTexture(block_texture);
blockSprite.setPosition(t_X, t_Y);
blockSprite.setOrigin(sf::Vector2f(blockSprite.getTexture()->getSize().x * 0.5, blockSprite.getTexture()->getSize().y * 0.8));
}
void TBlocks::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
target.draw(this->blockSprite, states);
}
void TBlocks::update_block()
{
blockSprite.move(0, 3);
}
#ifndef TPLAYER_H
#define TPLAYER_H
#include <SFML/Graphics.hpp>
class TPlayer : public sf::Drawable
{
public:
TPlayer(float t_X, float t_Y);
TPlayer() = delete;
virtual ~TPlayer() = default;
void update();
float moveRight();
float moveLeft();
void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
private:
sf::Texture playerTexture;
sf::Sprite playerSprite;
sf::Texture *pTexture = &playerTexture;
const double playerVelocity{4};
sf::Vector2f velocity{ playerVelocity, 0.f };
};
#endif // TPLAYER_H
#include "TPlayer.h"
#include <SFML\Graphics.hpp>
#include "Collision.h"
#include <iostream>
TPlayer::TPlayer(float t_X, float t_Y)
{
Collision::CreateTextureAndBitmask(playerTexture, "player_texture.jpg");
playerSprite.setTexture(playerTexture);
playerSprite.setPosition(t_X, t_Y);
playerSprite.setOrigin(sf::Vector2f(playerSprite.getTexture()->getSize().x * 0.5, playerSprite.getTexture()->getSize().y * 0.5));
}
void TPlayer::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
target.draw(this->playerSprite, states);
}
void TPlayer::update()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A) && this->moveLeft() >20)
{
playerSprite.move(-7, 0);
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D) && this->moveRight() < 880 )
{
playerSprite.move(7, 0);
}
else
{
playerSprite.move(0, 0);
}
}
float TPlayer::moveLeft()
{
return this->playerSprite.getPosition().x - playerSprite.getOrigin().x / 2.f;
}
float TPlayer::moveRight()
{
return this->playerSprite.getPosition().x + playerSprite.getOrigin().x / 2.f;
}
#include "TGame.h"
#include "TBlocks.h"
#include "Menu.h"
#include "Collision.h"
#include <SFML\Graphics.hpp>\
#define WIDTH 900
#define HEIGTH 950
TGame::TGame(TPlayer * player_, TBlocks * block_) : player(player_), block(block_), mWindow(sf::VideoMode(WIDTH, HEIGTH), "GAME")
{
mWindow.setFramerateLimit(60);
if (Collision::PixelPerfectTest(player, block))
{
mWindow.close();
}
}
void TGame::run()
{
while (mWindow.isOpen())
{
processEvents();
update_game();
render();
}
}
void TGame::processEvents()
{
sf::Event event;
while (mWindow.pollEvent(event))
{
if (event.type == sf::Event::Closed)
mWindow.close();
break;
}
}
void TGame::render()
{
mWindow.clear();
mWindow.draw(*block);
mWindow.draw(*player);
block->update_block();
player->update();
mWindow.display();
}
void TGame::update_game()
{
}
W jaki sposób mogę użyć tej funkcji w klasie TGame tak żeby sprawdzała kolizję dla tych dwóch klas player i blocks?