wojownik266 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Metody scrollowania » 2012-11-05 10:09:36 Poniżej zamieszczam kod programu z funkcjami scrollowania oraz link do programu exe z grafikami tego programu. Link do grafik: http://hostuje.net/file.php?id=a40fce53b7b4109867d2d6cab73e8892 A tutaj kod programu: #ifndef GRACZ_H #define GRACZ_H #include <SFML/Graphics.hpp>
const int SZER_EKR = 800; const int WYSO_EKR = 600;
int mActuallFrame = 0;
int mActuallLine = 0;
sf::Clock mAnimFrameTime;
sf::Clock loopClock;
float accumulator = 0;
float TIME_STEP = 0.03f;
class Gracz { private: void scroll_y( float & x, float & y ); public: float x; float y; float x1; float y1; public: void back_scrolowanie_y( sf::Sprite & spr, sf::Sprite & spr1, float & x, float & y, float & xx, float & yy ); void wrog_scrollowanie( sf::Sprite & Fota, float & x, float & x1, float y ); void anim_scrollowanie( sf::Sprite & animation, float & x, float & y, float & x1 ); }; void Gracz::back_scrolowanie_y( sf::Sprite & spr, sf::Sprite & spr1, float & x, float & y, float & xx, float & yy ) { y += 0.05; if( y >= WYSO_EKR ) y = 0; yy += 0.05; if( yy >= 0 ) yy =- WYSO_EKR; spr.setPosition( x, y ); spr1.setPosition( xx, yy ); } void Gracz::wrog_scrollowanie( sf::Sprite & Fota, float & x, float & x1, float y ) { if( x <= SZER_EKR && x >= 0 ) { x += 0.3; scroll_y( x, y ); Fota.setPosition( x, y ); } else { x1 -= 0.3; Fota.setPosition( x1, y ); if( x1 <= 0 && x >= SZER_EKR ) { x1 = SZER_EKR; x = y; } } } void Gracz::anim_scrollowanie( sf::Sprite & animation, float & x, float & y, float & x1 ) { accumulator += loopClock.restart().asSeconds(); if( accumulator > TIME_STEP ) { if( mAnimFrameTime.getElapsedTime().asSeconds() > 0.1 ) { mAnimFrameTime.restart(); mActuallFrame++; } if( mActuallFrame >= 4 ) { mActuallFrame = 0; mActuallLine++; } if( mActuallLine >= 1 ) { mActuallLine = 0; } animation.setTextureRect( sf::IntRect( mActuallFrame * 128, mActuallLine * 128, 128, 128 ) ); accumulator -= TIME_STEP; } if( x <= SZER_EKR && x >= 0 ) { x += 0.3; animation.setPosition( x, y ); } else { x1 -= 0.3; animation.setPosition( x1, y ); if( x1 <= 0 && x >= SZER_EKR ) { x1 = SZER_EKR; x = y; } } } void Gracz::scroll_y( float & x, float & y ) { if( x >= 240 && x <= 340 ) { y = 200; } } #endif
#include <SFML\Graphics.hpp> #include "Gracz.h"
int main() { sf::RenderWindow App( sf::VideoMode( SZER_EKR, WYSO_EKR, 32 ), "AnimScroll" ); sf::Texture back, back1, anim; back.loadFromFile( "Grafika/Background.png" ); back1.loadFromFile( "Grafika/Background.png" ); anim.loadFromFile( "Grafika/Animacja_1.png" ); sf::Sprite Back( back ), Anim( anim ); sf::Sprite Back1( back1 ); float x = 0, y = 0, x1 = 0; float bx = 0, by = 0, bx1 = 0, by1 =- WYSO_EKR; while( App.isOpen() ) { App.clear( sf::Color( 0, 0, 0, 255 ) ); sf::Event Event; while( App.pollEvent( Event ) ) { if( Event.type == sf::Event::Closed ) { App.close(); } } Gracz gra; gra.back_scrolowanie_y( Back, Back1, bx, by, bx1, by1 ); gra.anim_scrollowanie( Anim, x, y, x1 ); App.clear(); App.draw( Back ); App.draw( Back1 ); App.draw( Anim ); App.display(); } return EXIT_SUCCESS; }
Teraz mam taką prośbę. Czy ktoś mógłby rzucić okiem na powyższy kod i powiedzieć co można by w nim zmienić, ulepszyć, etc.. tak aby kod działał nieco lepiej? Oraz czy ktoś mógłby dopisać do tego kodu parę funkcji o podobnym działaniu? Pisząc "podobnym działaniu" mam namyśli scrollowanie z dodatkowymi bajerami takimi jak np. scrollowanie z obrotem, scrollowanie w kształt scieżki przemieszczania się węża, po okręgu itp. |
|
SeaMonster131 |
» 2012-11-05 15:58:48 Oraz czy ktoś mógłby dopisać do tego kodu parę funkcji o podobnym działaniu? Pisząc "podobnym działaniu" mam namyśli scrollowanie z dodatkowymi bajerami takimi jak np. scrollowanie z obrotem, scrollowanie w kształt scieżki przemieszczania się węża, po okręgu itp. |
Ty piszesz aplikację czy my? |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-05 16:50:56 No niby ja ale gdybym umiał samodzielnie napisać te funkcje o których napisanie prosiłem to by tego postu w ogóle nie było a po za tym swoją odpowiedzią odebrałeś mi ostatnią szansę na to aby uwierzyć że na tym forum są jeszcze ludzie którzy czują tak jak ja i mogliby je napisać. Wtedy Ja i Wy równałoby się My! Więc jak? |
|
DejaVu |
» 2012-11-05 16:53:29 Mi Ci niczego nie odbieramy... jednak jestem podobnego zdania co SeaMonster131, bowiem gier się nie tworzy w oparciu o kursy bądź gotowe rozwiązania - po prostu się myśli samodzielnie nad komponentami i ewentualnie w przypadku konieczności optymalizacji szuka się algorytmów rozwiązujących dany problem efektywnie. |
|
m4tx |
» 2012-11-05 17:02:16 scrollowanie w kształt scieżki przemieszczania się węża, po okręgu |
Polecam funkcje sin i cos :) |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-05 17:31:56 No to już coś:) Dzięki! |
|
crash |
» 2012-11-06 17:14:11 Tak btw żeby program działał szybciej możesz na jego wstępie stworzyć tablice gotowych wyników działania sin(x) oraz cos(x), od Ciebie już zależy dokładność (czy o jeden stopień, czy np 1/2 stopnia, czy 1/10). Zamiast wykonywać każdorazowo funkcje, operuj na gotowych wynikach ;> |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-11-07 11:09:41 A jak by to w praktyce miało wyglądać? Mogę prosić o kawałek kodu dla uodpornionych na wiedzę? |
|
« 1 » 2 3 |