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

[SFML] sterowanie, pliki, vertex/sprite

Ostatnio zmodyfikowano 2020-03-26 21:48
Autor Wiadomość
R0ut4
Temat założony przez niniejszego użytkownika
[SFML] sterowanie, pliki, vertex/sprite
» 2020-03-26 14:24:04
Problem krótki: Postać się nie rusza
kody:
main.cpp
C/C++
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "gracz.hpp"
#include "sterowanie.hpp"

enum Stan
{
    Menu, Gra, Esc
};
void setPosition( int x, int y );
int main()
{
    sf::RenderWindow aplikacja( sf::VideoMode( 840, 720 ), "Ogrod" );
    aplikacja.setFramerateLimit( 60 );
    Stan stan = Menu;
   
    Gracz player;
   
    player.setPosition( 200, 200 );
   
    sf::Texture tekstura_menu;
    tekstura_menu.loadFromFile( "Menu.png" );
    sf::Texture tekstura_start;
    tekstura_start.loadFromFile( "przycisk_start.png" );
   
    sf::Sprite tlo_menu;
    tlo_menu.setTexture( tekstura_menu );
    sf::Sprite sp_start;
    sp_start.setTexture( tekstura_start );
   
    while( aplikacja.isOpen() )
    {
        sf::Event event;
        while( aplikacja.pollEvent( event ) )
        {
            if( event.type == sf::Event::Closed )
            {
                aplikacja.close();
            }
        }
        switch( stan )
        {
            //OBSlUGA ZDARZEN W MENU
        case Menu:
            Ruch_postaci( player );
            break;
            //OBSLUGA ZDARZEN W GRZE
        case Gra:
           
            break;
            //OBSLUGA ZDARZEN W ESC
        case Esc:
           
            break;
        }
       
        aplikacja.clear();
        switch( stan )
        {
            //WYSWIETLANIE ZDARZEN W MENU
        case Menu:
            aplikacja.draw( tlo_menu );
            aplikacja.draw( sp_start );
            aplikacja.draw( player );
            break;
            //WYSWIETLANIE ZDARZEN W GRZE
        case Gra:
           
            break;
            //WYSWIETLANIE ZDARZEN W ESC
        case Esc:
           
            break;
        }
        aplikacja.display();
    }
    return 0;
}

sterowanie.hpp
C/C++
#ifndef sterowanie_hpp
#define sterowanie_hpp
#include "gracz.hpp"
void Ruch_postaci( Gracz & hero );
#endif // sterowanie_hpp

sterowanie.cpp
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include "sterowanie.hpp"
#include "gracz.hpp"

void Ruch_postaci( Gracz & hero )
{
    void move();
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) )
    {
        hero.move( 0, - 3 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) )
    {
        hero.move( 0, 3 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) )
    {
        hero.move( - 3, 0 );
    }
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) )
    {
        hero.move( 3, 0 );
    }
}
P-176512
pekfos
» 2020-03-26 18:47:20
Podaj kod rysujący gracza.
P-176520
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-03-26 19:28:29
.hpp i .cpp
C/C++
#ifndef gracz_hpp
#define gracz_hpp

class Gracz
    : public sf::Drawable
     , public sf::Transformable
{
private:
    virtual void draw( sf::RenderTarget & target, sf::RenderStates states ) const;
};
#endif // gracz_hpp
//////////////////////////////////////////////////////////////
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include "gracz.hpp"

void Gracz::draw( sf::RenderTarget & target, sf::RenderStates states ) const
{
    sf::VertexArray P( sf::Quads, 4 );
    P[ 0 ].position = sf::Vector2f( 200, 200 );
    P[ 1 ].position = sf::Vector2f( 400, 200 );
    P[ 2 ].position = sf::Vector2f( 400, 400 );
    P[ 3 ].position = sf::Vector2f( 200, 400 );
   
    sf::Texture textura;
    textura.loadFromFile( "gracz.png" );
    //sf::Sprite P;
    //P.setTexture (textura);
    P[ 0 ].texCoords = sf::Vector2f( 0, 0 );
    P[ 1 ].texCoords = sf::Vector2f( 50, 0 );
    P[ 2 ].texCoords = sf::Vector2f( 50, 50 );
    P[ 3 ].texCoords = sf::Vector2f( 0, 50 );
   
    states.texture = & textura;
    target.draw( P, states );
}

Edit: Jak mogę sprawdzić pozcyję myszy względem sprite'a, który jest przyciskiem?
P-176523
pekfos
» 2020-03-26 21:45:03
Nie uwzględniasz transformacji przy rysowaniu.
https://www.sfml-dev.org​​/documentation/2.5.1​​/classsf_1_1Transformable.php
C/C++
class MyEntity
    : public sf::Transformable
     , public sf::Drawable
{
    virtual void draw( sf::RenderTarget & target, sf::RenderStates states ) const
    {
        states.transform *= getTransform(); /// !!!!!
        target.draw(..., states );
    }
};
P-176525
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-03-26 21:48:33
Siedziałem i rozkiminiałem gdzie leży problem mniej więcej godzinę przed dodaniem pytania
DZIĘKI WIELKIE
P-176526
« 1 »
  Strona 1 z 1