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

[SFML 2.0] Animacje sprajtów

Ostatnio zmodyfikowano 2012-05-17 17:20
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
[SFML 2.0] Animacje sprajtów
» 2012-05-16 16:54:15
Czy prawidłowo robię animację sprajtów jeżeli tak to dlaczego gra przycina?
C/C++
sf::Texture[ 8 ];
sf::Sprite Sprajt;
sf::Clock Clock;
int next = 0;
Texture[ 0 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\1.png" );
Texture[ 1 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\2.png" );
Texture[ 2 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\3.png" );
Texture[ 3 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\4.png" );
Texture[ 4 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\5.png" );
Texture[ 5 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\6.png" );
Texture[ 6 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\7.png" );
Texture[ 7 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\8.png" );

int main()
{
   
    it( sf::keyboard::iskeypressed( sf::Keyboard::Right ) )
    {
        if( Clock.getElapsedTime() > 0.5 )
        {
            Sprajt.setTexture( Texture[ next ] );
            ++next;
            if( next == 8 )
                 next = 0;
           
            Clock.reset();
        }
    }
   
   
    Window.draw( Sprajt );
   
    Window.display();
}
P-56785
SeaMonster131
» 2012-05-16 19:51:32
Hm na pewno nie masz ładowania tych obrazków w pętli głównej gry ?
P-56801
diego997
Temat założony przez niniejszego użytkownika
» 2012-05-16 19:55:18
Mam i myślałem że to właśnie tam ma być a nie gdzie jest rysowanie



EDIT:: Czy chodzi ci o to Texture[ 0 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\1.png" ); ? Bo jeżeli tak to poza pętlą


@SeaMonster mam to w konstruktorze klasy może tam być ?


EDIT:: Po wywaleniu wszystkich
Texture[ 0 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\1.png" );
Texture[ 1 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\2.png" );
Texture[ 2 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\3.png" );
Texture[ 3 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\4.png" );
Texture[ 4 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\5.png" );
Texture[ 5 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\6.png" );
Texture[ 6 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\7.png" );
Texture[ 7 ].loadFromFile( "C:\\Users\\Marian\\Desktop\\rpg\\char\\8.png" );

Gra diametralnie przyspieszyła widać, że trzymanie tych textur w pamięci strasznie obciąża, ale czemu?
P-56802
m4tx
» 2012-05-16 20:38:23
Ja tam był te wszystkie tekstury złączył w jedną i potem tylko rysował odpowiedni kawałek sprite'a.
P-56808
diego997
Temat założony przez niniejszego użytkownika
» 2012-05-16 20:51:51
Znaczy dziwi mnie to że samo trzymanie kilku textur bez używania tak obciąża procesor.


EDIT:: Zaraz umre masakra jak ładuje te obrazki nie korzystając z klasy to wszystko działa nawet mogę je non stop ładować co każdy obieg pętli nic nie przycina natomiast jak ładuję do klasy to sie zaczyna




C/C++
#PLAYER_H

class _Player
{
    sf::Texture Texture[ 8 ];
   
public:
    void load();
   
};

#PLAYER_CPP

void _Player::load()
{
    Texture[ 0 ].loadfromfile( "textura.png" );
    ...
    Texture[ 7 ].loadfromfile( "textura7.png" );
}

#include <iostream>
#include "PLAYER.H"


int main()
{
   
    sf::Window Okno(...);
    _Player Player;
   
    Player.load(); //PRZYCINA!!!!!! Jak dam w komentarz to działa
   
    sf::Texture Texture[ 8 ];
    Texture[ 0 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 1 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 2 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 3 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 4 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 5 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 6 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
    Texture[ 7 ].loadfromfile( "textura.png" ); //O dziwo nie przycina nawet w pętli głównej jak jest
   
    while( Okno.isopen() )
    {
       
        Okno.display();
    }
   
   
}



[ cpp ]
P-56811
ison
» 2012-05-16 21:26:13
Gra diametralnie przyspieszyła widać, że trzymanie tych textur w pamięci strasznie obciąża, ale czemu?
nie obciąża trzymanie ich w pamięci tylko ładowanie na nowo co ułamek sekundy
P-56815
Admixior
» 2012-05-16 21:27:30
A pokażesz inne funkcje jakie wywołujesz w pętli(parametry).
Może masz dużo funkcji w których zamiast użyć referencji używasz kopiowanie wartości(np. playera), lub konstruktor tej klasy jest wywoływany przez coś innego. I to tak spowalnia.

//To są tylko spekulacje. Prawdziwy problem może tkwić w czymś innym.
P-56816
diego997
Temat założony przez niniejszego użytkownika
» 2012-05-16 22:02:07
@Admixior dałem w komentarz wszystkie funkcje które jako parametr przyjmują obiekt klasy Player i faktycznie gra przyspieszyła tylko nie rozumiem dlaczego przecież teraz Texture[8].loadfromfile nie jest wykonywane w konstruktorze tylko w metodzie tej klasy. Przecież metoda to nie konstruktor nie powinna się wykonywać przy tworzeniu obiektu.
P-56821
« 1 » 2
  Strona 1 z 2 Następna strona