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

[SFML 2.1] Tło jako obraz.

Ostatnio zmodyfikowano 2014-08-09 15:57
Autor Wiadomość
Azmael
Temat założony przez niniejszego użytkownika
[SFML 2.1] Tło jako obraz.
» 2014-08-07 21:53:14
Mam następujący problem. mam funkcje która przesuwa sprajt we wszystkie strony [WSAD] wszystko pięknie ładnie ale tło jest czarne przegrzebałem internet. Naoglądałem się jakiś niemieckich poradników i nic. Próbowałem różnych sposobów ustawień. Jedyne co mi się udało mniej więcej tak jak bym chciał to renderowanie jednocześnie tła i sprajtu jako jednego czyli przesuwam sprajt tło też się renderuje od nowa.

Strasznie to przymula i niema sensu. Jest jakaś możliwość aby tło było raz zaimplementowane jako obraz a wszystko później renderowane na nim oddzielnie?

Przepraszam za brak kod. Ale trochę w nim namieszałem i muszę go uporządkować. zapewne dodam jutro skoro świt. Bo dziś mi już głowa pęka.
P-115196
1aam2am1
» 2014-08-07 23:28:04
Jak dl amnie powinieneś wczytać texture tła i rysować ją na ekranie przed rysowaniem innych rzeczy tak będzie najprościej.
P-115202
Azmael
Temat założony przez niniejszego użytkownika
» 2014-08-08 07:52:36
Ale tak waśnie robiłem i ok wczytała mi się tekstura. ale kiedy wczytywałem teksturę deseczki  to tło znikało i była tylko deska na czarnym tle.
P-115204
1aam2am1
» 2014-08-08 10:14:09
Podaj kod.
P-115206
Azmael
Temat założony przez niniejszego użytkownika
» 2014-08-09 15:07:17
trochę to trwało ale nie mogłem znaleźć czasu oto kod,

#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include <SFML\Graphics\Font.hpp>
#include <SFML\Graphics\Image.hpp>
#include <SFML\OpenGL.hpp>
#include <iostream>
#include <windows.h>
#include <stdlib.h>


int b = 500;

int q = 1;
int v = 1;
int w = 30;
int t = 100;

sf::RenderWindow Okno(sf::VideoMode(800, 600, 32), "OKNO", sf::Style::Default, sf::ContextSettings(20));
void deska()
{

sf::Texture teks2;
teks2.loadFromFile("deska.png");
sf::Sprite sprajt2;
sprajt2.setTexture(teks2);
sprajt2.setScale(2.2, 1.8);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
 
  w = w + 1;

        }

if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{

w = w - 1;

}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{


t = t - 1;

}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{

t = t + 1;

}
sprajt2.setPosition(w, t);
Okno.clear();

    Okno.draw(sprajt2);
}

int main()

{
while (Okno.isOpen())
{

sf::Texture teks;
teks.loadFromFile("kolor.jpeg");
sf::Sprite sprajt;
sprajt.setTexture(teks);

        deska();
Okno.draw(sprajt);

Okno.display();

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
{

Okno.close();

}







}
system("PAUSE");
return 0;
}

Chce aby "kolor.jpeg" był tłem ale gdy jednocześnie wyświetlam deske i "kolor.jpeg" to strasznie muli przy jej przesuwaniu. albo jest tylko deska albo tylko "kolor.jpeg". Nie wiem jest jakaś możliwość aby zapisać "kolor.jpeg" jako zmienną która cały czas była by stał dla okna  i na niej było by wszystko wyświetlane ?
P-115242
Jacob99
» 2014-08-09 15:39:58
strasznie muli bo w pętli głównej za każdym razem tworzysz 2textury i 2sprite'y.
Poprawiony kod:
C/C++
#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include <SFML\OpenGL.hpp>
#include <iostream>
#include <windows.h>
#include <stdlib.h>


int b = 500;

int q = 1;
int v = 1;
int w = 30;
int t = 100;

int main()

{
    sf::RenderWindow Okno( sf::VideoMode( 800, 600, 32 ), "OKNO", sf::Style::Default, sf::ContextSettings( 20 ) );
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    sf::Texture teks;
    teks.loadFromFile( "kolor.jpeg" );
    sf::Sprite sprajt;
    sprajt.setTexture( teks );
    sf::Texture teks2;
    teks2.loadFromFile( "deska.png" );
    sf::Sprite sprajt2;
    sprajt2.setTexture( teks2 );
    sprajt2.setScale( 2.2, 1.8 );
    sprajt2.setPosition( w, t );
   
    sf::Event event;
    while( Okno.isOpen() )
    {
        while( Okno.pollEvent( event ) )
        {
            if( sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape )
            {
                Okno.close();
            }
            if( sf::Event::KeyPressed && event.key.code == sf::Keyboard::D )
            {
                w = w + 1;
            }
           
            if( sf::Event::KeyPressed && event.key.code == sf::Keyboard::A )
            {
                w = w - 1;
            }
            if( sf::Event::KeyPressed && event.key.code == sf::Keyboard::W )
            {
                t = t - 1;
            }
            if( sf::Event::KeyPressed && event.key.code == sf::Keyboard::S )
            {
                t = t + 1;
            }
            Okno.clear();
            Okno.draw( sprajt );
            Okno.draw( sprajt2 );
            Okno.display();
        }
       
       
    }
    system( "PAUSE" );
    return 0;
}
P-115245
Azmael
Temat założony przez niniejszego użytkownika
» 2014-08-09 15:57:06
Dzięki teraz wszystko ładnie śmiga :)
P-115246
« 1 »
  Strona 1 z 1