Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - swthxbld3

Pages: [1]
1
General / I have a problem with background
« on: May 19, 2024, 03:09:15 pm »
I need to make the background rise with the platforms when jumping, but I do not know how to do this. You also need the background to be drawn infinitely many times. Can you help me please
main.cpp
(#include <SFML/Graphics.hpp>
#include "hero.h"
#include "game.h"
#include <iostream>


int main() {
    sf::RenderWindow window(sf::VideoMode(1920, 1080), "WayofDarkness");



    game(window);

   

    return 0;
})
hero.h
(#ifndef HERO_H
#define HERO_H

#include <SFML/Graphics.hpp>

class Hero {
private:
    sf::Sprite sprite;
    sf::Texture texture;
    float x, y;

public:
    Hero(std::string spritePath, float posX, float posY) {
        sprite.setTextureRect(sf::IntRect(0, 2048, 1024 ,1024));
        sprite.scale(sf::Vector2f(0.15, 0.15));
        if (!texture.loadFromFile(spritePath)) {
        }

        sprite.setTexture(texture);
        x = posX;
        y = posY;
        sprite.setPosition(x, y);
    }

    void Idle(sf::RenderWindow& window, float, float&);

    void draw(sf::RenderWindow& window);

    void move(sf::RenderWindow& window, float&, float&, float, float&, bool&);








};

#endif HERO_H)
hero.cpp
(#include <iostream>
#include "hero.h"
#include "update.h"



void Hero::Idle(sf::RenderWindow& window, float time, float& CurrentFrame)
{

}

void Hero::draw(sf::RenderWindow& window)
{
        window.draw(sprite);
}




void Hero::move(sf::RenderWindow& window, float&  playerX, float& playerY, float time, float& CurrentFrame, bool& Idle)
{

       

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
                playerX -= 0.1 * time;
                CurrentFrame += 0.005 * time; //служит для прохождения по "кадрам". переменная доходит до трех суммируя произведение времени и скорости. изменив 0.005 можно изменить скорость анимации
                if (CurrentFrame > 4) CurrentFrame -= 3; //если пришли к третьему кадру - откидываемся назад.
                if (CurrentFrame != 0) {
                        sprite.setTextureRect(sf::IntRect(1024 * int(CurrentFrame), 3072, 1024, 1024));
                }
                Idle = true;
        }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
                playerX += 0.1 * time;
                CurrentFrame += 0.005 * time; //служит для прохождения по "кадрам". переменная доходит до трех суммируя произведение времени и скорости. изменив 0.005 можно изменить скорость анимации
                if (CurrentFrame > 4) CurrentFrame -= 3; //если пришли к третьему кадру - откидываемся назад.
                sprite.setTextureRect(sf::IntRect(1024 * int(CurrentFrame), 3072, -1024, 1024));
                Idle = false;
        }
        else {
                if (Idle == true) {
                        CurrentFrame += 0.005 * time; //служит для прохождения по "кадрам". переменная доходит до трех суммируя произведение времени и скорости. изменив 0.005 можно изменить скорость анимации
                        if (CurrentFrame > 3) CurrentFrame -= 2; //если пришли к третьему кадру - откидываемся назад.
                        sprite.setTextureRect(sf::IntRect(1024 * int(CurrentFrame), 2048, 1024, 1024));
                }
                if (Idle == false) {
                        CurrentFrame += 0.005 * time; //служит для прохождения по "кадрам". переменная доходит до трех суммируя произведение времени и скорости. изменив 0.005 можно изменить скорость анимации
                        if (CurrentFrame > 3) CurrentFrame -= 2; //если пришли к третьему кадру - откидываемся назад.
                        sprite.setTextureRect(sf::IntRect(1024 * int(CurrentFrame), 2048, -1024, 1024));
                }
        }


    sprite.setPosition(playerX, playerY);

}






)
game.h
(#pragma once

#include <SFML/Graphics.hpp>
#include "hero.h"
#include "scence.h"
#include <iostream>


float playerX = 250;
float playerY = 151;



void game(sf::RenderWindow& window) {

    window.setFramerateLimit(60);


    sf::Clock clock;

    while (window.isOpen()) {


        std::cout << time<< std::endl;
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }




        window.clear();
        scence(window, playerX, playerY);
        window.display();
    }
}
)
scene.h
(#pragma once

#include <SFML\Graphics.hpp>
#include <SFML\Audio.hpp>
#include <random>
#include <ctime>
#include <sstream>
#include "hero.h"



float CurrentFrame = 0;
bool Idle;
float backGroundY = 0;

void scence(sf::RenderWindow& window, float& playerX, float& playerY) {
        Hero hero("ALL/images/heroAnimation.png", 100, 100);



        sf::Texture backgroundTexture;
        sf::Texture platformTexture;
        backgroundTexture.loadFromFile("ALL/images//BG.jpg");
        platformTexture.loadFromFile("ALL/images/platform.png");
        sf::Sprite background(backgroundTexture);
        sf::Sprite platform(platformTexture);

        sf::RectangleShape gameoverBackground(sf::Vector2f(1920, 1080));
        gameoverBackground.setFillColor(sf::Color::White);
        sf::Clock clock;
        sf::Time t1 = sf::microseconds(10000);
        sf::Font font;
        font.loadFromFile("ALL/font/arial.ttf");
        sf::Text scoreText;
        scoreText.setFont(font);
        scoreText.setCharacterSize(50);
        scoreText.setFillColor(sf::Color::Red);
        sf::Text gameoverText;
        gameoverText.setFont(font);
        gameoverText.setString("Game Over!");
        gameoverText.setCharacterSize(80);
        gameoverText.setFillColor(sf::Color::Red);

        sf::SoundBuffer buffer;
        buffer.loadFromFile("ALL/sound/jump.wav");
        sf::Sound sound;
        sound.setBuffer(buffer);

        sf::Vector2u platformPosition[20];
        std::uniform_int_distribution<unsigned> x(0, 1920);       //-platformTexture.getSize().x
        std::uniform_int_distribution<unsigned> y(100, 1080);
        std::default_random_engine e(time(0));
        for (size_t i = 0; i < 20; ++i)
        {
                platformPosition[i].x = x(e);
                platformPosition[i].y = y(e);
        }

        float dy = 0;
        int height = 150;
        int score = 0;

        //const int PLAYER_LEFT_BOUNDING_BOX = 20;
        //const int PLAYER_RIGHT_BOUNDING_BOX = 60;
        //const int PLAYER_BOTTOM_BOUNDING_BOX = 70;

        const int PLAYER_LEFT_BOUNDING_BOX = 20;
        const int PLAYER_RIGHT_BOUNDING_BOX = 80;
        const int PLAYER_BOTTOM_BOUNDING_BOX = 100;


        while (window.isOpen())
        {
                float time = clock.restart().asMicroseconds();
                time = time / 800;
                clock.restart();
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                window.close();
                }

                if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                        playerX -= 10;
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                        playerX += 10;


                if (playerX > 1800)
                        playerX = 1800; //0
                if (playerX < -40)
                        playerX = -40; // 1920

                if (playerY == height && dy < (-1.62))
                {
                        score += 1;
                        scoreText.setString("Score: " + std::to_string(score));
                }

                // player&#39;s jump mechanism
                dy += 0.2;
                playerY += dy;
                backGroundY += dy;
               

                if (playerY < height)
                        for (size_t i = 0; i < 20; ++i)
                        {

                                playerY = height;
                                platformPosition[i].y -= dy;  // vertical translation
                                if (platformPosition[i].y > 1080) // set new platform on the top
                                {
                                        platformPosition[i].y = 0;
                                        platformPosition[i].x = x(e);
                                }

                        }
                // detect jump on the platform
                for (size_t i = 0; i < 20; ++i)
                {
                        if ((playerX + PLAYER_RIGHT_BOUNDING_BOX > platformPosition[i].x) && (playerX + PLAYER_LEFT_BOUNDING_BOX < platformPosition[i].x + platformTexture.getSize().x)        // player&#39;s horizontal range can touch the platform
                                && (playerY + PLAYER_BOTTOM_BOUNDING_BOX > platformPosition[i].y) && (playerY + PLAYER_BOTTOM_BOUNDING_BOX < platformPosition[i].y + platformTexture.getSize().y)  // player&#39;s vertical   range can touch the platform
                                && (dy > 0)) // player is falling
                        {
                                sound.play();
                                dy = -20;
                        }

                }
                hero.move(window, playerX, playerY, time, CurrentFrame, Idle);
                hero.Idle(window, time, CurrentFrame);

                window.draw(background);
                background.setPosition(0, backGroundY);
                hero.draw(window);

                // set and draw platforms
                for (size_t i = 0; i < 20; ++i)
                {
                        platform.setPosition(platformPosition[i].x, platformPosition[i].y);
                        window.draw(platform);
                }

                // game over
                if (playerY > 1080)
                {
                        gameoverText.setPosition(30, 200);
                        scoreText.setPosition(150, 400);
                        goto gameover;
                }
                window.draw(scoreText);
                window.display();
        }

        // Game Over
gameover:
        while (window.isOpen())
        {
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                window.close();
                }
                window.draw(gameoverBackground);
                window.draw(gameoverText);
                window.draw(scoreText);
                window.display();
        }
       

})

2
General / Re: I have a problem
« on: May 19, 2024, 06:17:40 am »
It turns out that this is because of the image itself. But now I have fps drawdowns. It is also unclear why. Could you look at the code and tell me what is better to redo.

3
General / I have a problem
« on: May 19, 2024, 06:00:01 am »
When I run the program, the character moves in a small fps. I looked at how it could be solved and came across Clock and time. But the problem has not been solved. Please help me, I have to submit the project soon. The problem is that when I add the background, the character starts lagging
main.cpp
 (#include <SFML/Graphics.hpp>
#include "hero.h"
#include "game.h"
#include <iostream>


int main() {
    sf::RenderWindow window(sf::VideoMode(1920, 1080), "WayofDarkness");



    game(window);

   

    return 0;
})

hero.h
 (#ifndef HERO_H
#define HERO_H

#include <SFML/Graphics.hpp>

class Hero {
private:
    sf::Sprite sprite;
    sf::Texture texture;
    float x, y;

public:
    Hero(std::string spritePath, float posX, float posY) {
        if (!texture.loadFromFile(spritePath)) {
        }

        sprite.setTexture(texture);
        x = posX;
        y = posY;
        sprite.setPosition(x, y);
    }

    void draw(sf::RenderWindow& window);

    void move(sf::RenderWindow& window, float&, float&, float);








};

#endif HERO_H)

hero.cpp
 (#include <iostream>
#include "hero.h"
#include "update.h"



void Hero::draw(sf::RenderWindow& window)
{
        window.draw(sprite);
}

void Hero::move(sf::RenderWindow& window, float&  playerX, float& playerY, float time)
{

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
                playerX -= 0.6 * time;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                playerX += 0.6 * time;


    sprite.setPosition(playerX, playerY);

}






)

game.h
 (#pragma once

#include <SFML/Graphics.hpp>
#include "hero.h"
#include "scence.h"
#include <iostream>


float playerX = 250;
float playerY = 151;



void game(sf::RenderWindow& window) {

    //window.setFramerateLimit(60);


    Hero hero("HeroSprite/doodle.png", 100, 100);
    sf::Clock clock;

    while (window.isOpen()) {
        float time = clock.restart().asSeconds();
        clock.restart();

        std::cout << time<< std::endl;
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }


        window.clear();
        hero.move(window, playerX, playerY, time);
        scence(window);
        hero.draw(window);
        window.display();
    }
}
)

scene.h
 (#pragma once

#include <SFML/Graphics.hpp>





void scence(sf::RenderWindow& window) {
        sf::Texture backgroundTexture;
        backgroundTexture.loadFromFile("ALL/images/animationBG.jpg");
        sf::Sprite background(backgroundTexture);
        window.draw(background);


       

})


Pages: [1]
anything