2d_patformer/player.cpp
2025-09-13 20:42:57 +00:00

79 lines
3.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "player.hpp" // Включаємо заголовок класу Player, щоб компілятор знав про його методи та змінні.
// Конструктор класу Player. Він автоматично викликається при створенні об'єкта Player.
Player::Player()
// Список ініціалізації: кращий спосіб задати початкові значення змінним.
// Тут ініціалізуємо `shape` (прямокутник) з розміром 50x50.
: shape(sf::Vector2f(50.f, 50.f)),
// Ініціалізуємо змінну `speed` значенням 200.
speed(500.f),
velocityY(0.f),
jumpStrength(600.f),
onGround(true),
gravity(1500.f),
groundLevel(1040.f)
{
// Тіло конструктора: тут можна задавати додаткові параметри.
// Встановлюємо зелений колір для прямокутника.
shape.setFillColor(sf::Color::Green);
// Встановлюємо початкову позицію гравця на екрані.
shape.setPosition(50.f, 1040.f);
}
// Закоментований метод `update` (робота на потім).
// Він призначений для оновлення логіки гравця у кожному кадрі гри.
// Усередині цього методу, ви будете обробляти рух, зіткнення, анімацію тощо.
// `deltaTime` — це час, що минув з попереднього кадру, і він забезпечує плавний рух незалежно від швидкості комп'ютера.
void Player::update(float deltaTime){ // Тут буде логіка руху гравця
float moveX = 0.f;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)){
moveX -= speed * deltaTime;} //рух вліво
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)){
moveX += speed * deltaTime;} //рух вправо
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround==true) {
velocityY = -jumpStrength;
}
velocityY += gravity * deltaTime;
shape.move(moveX, 0.f);
shape.move(0.f , velocityY * deltaTime);
//перевірка чи є земля та обмеження щоб фігура не вилитіла
if(shape.getPosition().y + shape.getSize().y >= groundLevel){
shape.setPosition(shape.getPosition().x, groundLevel -shape.getSize().y);
velocityY = 0;
onGround = true;
}else{
onGround = false;
}
/////////////////////////////////////////////////////
if(shape.getPosition().x < 0.f)
shape.setPosition(0.f, shape.getPosition().y);
if(shape.getPosition().x+shape.getSize().x>1925.f)
shape.setPosition(1925.f - shape.getSize().x ,shape.getPosition().y);
if(shape.getPosition().y < 0.f)
shape.setPosition(shape.getPosition().x,0.f);
if(shape.getPosition().y+shape.getSize().y>1200.f)
shape.setPosition(shape.getPosition().x, 1200.f - shape.getSize().y);
}
// Метод `draw` для відмальовування гравця на екрані.
// Приймає посилання на вікно, щоб знати, де малювати.
void Player::draw(sf::RenderWindow& window)
{
// Викликаємо метод `draw` вікна, щоб намалювати наш об'єкт `shape`.
window.draw(shape);
}