Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] Wychodzenie poza ściany oraz pisanie w oknie gui.

Ostatnio zmodyfikowano 2014-07-31 15:48
Autor Wiadomość
Avenon
Temat założony przez niniejszego użytkownika
» 2014-07-31 15:23:08
C/C++
#include <SFML/Graphics.hpp>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
int main()
{
    sf::ContextSettings settings;
    settings.antialiasingLevel = 8;
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 640, 480, 32 ), "Gromak games v1.0" );
    sf::Texture ludzik1;
    ludzik1.loadFromFile( "index2.psd" );
    sf::Sprite ludzik;
    ludzik.setTexture( ludzik1 );
    sf::Texture potwor1;
    potwor1.loadFromFile( "indeks3.psd" );
    sf::Sprite potwor;
    sf::Texture tlo1;
    tlo1.loadFromFile( "indeks4.jpg" );
    sf::Sprite tlo;
    tlo.setTexture( tlo1 );
    potwor.setTexture( potwor1 );
    tlo.setScale( 1, 1 );
    tlo.setPosition( 0, 0 );
    ludzik.setScale( 0.5f, 0.5f );
    ludzik.setOrigin( 0.5f, 0.5f );
    ludzik.setPosition( 580, 360 );
    potwor.setScale( 0.5f, 0.5f );
    potwor.setOrigin( 0.5f, 0.5f );
    potwor.setPosition( 10, 10 );
    sf::Font font;
    font.loadFromFile( "arial.ttf" );
    sf::Text text;
    text.setFont( font );
    text.setString( "aaa " );
    text.setCharacterSize( 4 );
    text.setColor( sf::Color::Red );
    text.setStyle( sf::Text::Bold | sf::Text::Underlined );
    text.setPosition( 100, 100 );
   
    while( oknoAplikacji.isOpen() )
    {
       
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
           
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
        }
        oknoAplikacji.draw( text );
        oknoAplikacji.draw( tlo );
        oknoAplikacji.draw( ludzik );
        oknoAplikacji.draw( potwor );
        oknoAplikacji.display();
        int g = ludzik.getPosition().x;
        int h = ludzik.getPosition().y;
        int j = potwor.getPosition().x;
        int k = potwor.getPosition().y;
        int o = potwor.getPosition().y;
        int p = potwor.getPosition().x;
        sf::FloatRect boundingBox = ludzik.getGlobalBounds();
        sf::FloatRect otherBox = potwor.getGlobalBounds();
        if( boundingBox.intersects( otherBox ) )
        {
            ludzik.setPosition( 580, 360 );
            potwor.setPosition( 10, 10 );
        }
       
        Tu wiadomo co jest
       
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
        {
            ludzik.move( 0, - 0.2 );
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) )
        {
            ludzik.move( 0, 0.2 );
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) )
        {
            ludzik.move( - 0.2, 0 );
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) )
        {
            ludzik.move( 0.2, 0 );
        }
        if( ludzik.getPosition().x > potwor.getPosition().x )
        do
       
       
        Tutaj kod sprawiajacy ze potwor podaza za nami dopoki jego kordy nie beda rowne kordom ludzika
       
        {
            potwor.move( 0.12f, 0 );
        } while( ludzik.getPosition().x == potwor.getPosition().x );
       
        if( ludzik.getPosition().y > potwor.getPosition().y )
        do
        {
            potwor.move( 0, 0.12f );
        } while( ludzik.getPosition().y == potwor.getPosition().y );
       
        if( ludzik.getPosition().y < potwor.getPosition().y )
        do
        {
            potwor.move( 0, - 0.12f );
        } while( ludzik.getPosition().y == potwor.getPosition().y );
       
        if( ludzik.getPosition().x < potwor.getPosition().x )
        do
        {
            potwor.move( - 0.12f, 0 );
        } while( ludzik.getPosition().x == potwor.getPosition().x );
       
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::R ) )
        {
            ludzik.rotate( 0.2 );
        }
       
        Mechanizm nie pozwalajacy wyjsc poza plansze
       
       
        if( ludzik.getPosition().x <= 600 && ludzik.getPosition().y <= 0 )
        {
            ludzik.setPosition( g, h );
        }
        if( ludzik.getPosition().x <= 0 && ludzik.getPosition().y <= 440 )
        {
            ludzik.setPosition( g, h );
        }
        if( ludzik.getPosition().x >= 600 && ludzik.getPosition().y >= 0 )
        {
            ludzik.setPosition( g, h );
        }
        if( ludzik.getPosition().x >= 0 && ludzik.getPosition().y >= 383 )
        {
            ludzik.setPosition( g, h );
        }
       
        Tu mechanizm nie pozwalajacy wyjsc poza plansze
       
       
        if( potwor.getPosition().x <= 600 && potwor.getPosition().y <= 0 )
        {
            potwor.setPosition( j, k );
        }
        if( potwor.getPosition().x <= 0 && potwor.getPosition().y <= 440 )
        {
            potwor.setPosition( j, k );
        }
        if( potwor.getPosition().x >= 600 && potwor.getPosition().y >= 0 )
        {
            potwor.setPosition( j, k );
        }
        if( potwor.getPosition().x >= 0 && potwor.getPosition().y >= 440 )
        {
            potwor.setPosition( j, k );
        }
       
    }
    return 0;
}

Ucze sie sfmlu jeden dzien więc krytyke zostawcie dla siebie ale możecie rzucić jakies porady co w tym kodzie mozna zrobić smuklej, lepiej, inaczej.

No więc mówcie co gdzie jest źle.



@pekfos ~Taki sens że gdyby każdy miał szukać w dokumentacji swoich zagadnień to by ludzion czasu zabrakło.
P-114758
pekfos
» 2014-07-31 15:39:35
C/C++
text.setCharacterSize( 4 );
4 piksele?

C/C++
oknoAplikacji.draw( text );
oknoAplikacji.draw( tlo );
Zasłaniasz tłem. Wszystko rysujesz na tekście.

Taki sens że gdyby każdy miał szukać w dokumentacji swoich zagadnień to by ludzion czasu zabrakło.
Gdyby każdy to robił, to nie traciłby tyle czasu i nie było by wielu niepotrzebnych pytań na forach.
P-114761
Avenon
Temat założony przez niniejszego użytkownika
» 2014-07-31 15:44:55
Poprawiłem, ustawiłem piksele na 240 i nadal nie działa.

EDIT:
Działa, problemem było złe miejsce wklejenia arial.ttf
Dobra, teraz kolejna sprawa, jak zrobić aby gdy
C/C++
if( boundingBox.intersects( otherBox ) )
{
    To zmniejsz napis( czyli np ilosc zycia ludzika ) od 100 do 0 w odpowiednim tempie ?
}
P-114762
pekfos
» 2014-07-31 15:48:34
Problem rozwiązany, temat do zamknięcia.
P-114764
1 2 « 3 »
Poprzednia strona Strona 3 z 3