[SFML 2.1] Tło jako obraz.
Ostatnio zmodyfikowano 2014-08-09 15:57
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. |
|
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. |
|
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. |
|
1aam2am1 |
» 2014-08-08 10:14:09 Podaj kod. |
|
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 ? |
|
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: #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; }
|
|
Azmael Temat założony przez niniejszego użytkownika |
» 2014-08-09 15:57:06 Dzięki teraz wszystko ładnie śmiga :) |
|
« 1 » |