SFML Kod + Pytanie odnośnie tworzenia nowych projektów.
Ostatnio zmodyfikowano 2017-12-20 16:50
Lentyl Temat założony przez niniejszego użytkownika |
SFML Kod + Pytanie odnośnie tworzenia nowych projektów. » 2017-12-19 21:28:40 Witam mam dwa pytania 1 dlaczego gość w kodzie (jest to gra Arkanoid) zmienia parametry poruszania się piłki przed kolizją chodzi mi dokładnie o ten fragment sBall.move(dx, 0); sBall.move(0, dy); Można zauważyć, że piłka jest spowolniona w stosunku do wcześniejszych parametrów float dx=5, dy=6; ale dlaczego ich po prostu nie zmniejszyć. jest to pierwszy mój projekt a raczej zrobiony z tym gościem https://www.youtube.com/watch?v=U7vSIvLLZi0 minus jest taki, że on nie tłumaczy co i dlaczego robi ale ogólnie jest ok 2 pytanie Czy jest jakiś sposób, żeby ominąć żmudną procedurę dodawania biblioteki SFML do każdego nowego projektu, bądź usprawnienie tego (korzystam z Visual studio 2015) #include "stdafx.h" #include <SFML/Graphics.hpp> #include <SFML/Window.hpp> #include <time.h> #include <iostream>
bool isCollide( sf::Sprite s1, sf::Sprite s2 ) { return s1.getGlobalBounds().intersects( s2.getGlobalBounds() ); }
int main() { srand( time( 0 ) ); sf::RenderWindow window( sf::VideoMode( 540, 450 ), "Arcanoid!" ); window.setFramerateLimit( 60 ); sf::Texture t1, t2, t3, t4; t1.loadFromFile( "images/block01.png" ); t2.loadFromFile( "images/background.jpg" ); t3.loadFromFile( "images/ball.png" ); t4.loadFromFile( "images/paddle.png" ); sf::Sprite sBackground( t2 ), sBall( t3 ), sPaddle( t4 ); sPaddle.setPosition( 300, 440 ); sBall.setPosition( 300, 300 ); sf::Sprite block[ 1000 ]; int n = 0; for( int i = 1; i <= 10; i++ ) for( int j = 1; j <= 10; j++ ) { block[ n ].setTexture( t1 ); block[ n ].setPosition( i * 45.0, j * 20.0 ); n++; } float dx = 5, dy = 6; while( window.isOpen() ) { sf::Event event; while( window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) window.close(); } sBall.move( dx, 0 ); for( int i = 0; i < n; i++ ) if( isCollide( sBall, block[ i ] ) ) { block[ i ].setPosition( - 100, 0 ); dx = - dx; } sBall.move( 0, dy ); for( int i = 0; i < n; i++ ) if( isCollide( sBall, block[ i ] ) ) { block[ i ].setPosition( - 100, 0 ); dy = - dy; } sf::Vector2f b = sBall.getPosition(); if(( b.x < 0 ) ||( b.x > 540 ) ) dx = - dx; if(( b.y < 0 ) ||( b.y > 450 ) ) dy = - dy; sf::Vector2f p = sPaddle.getPosition(); if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::Right ) ) { if( p.x < 450 ) sPaddle.move( 6, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Key::Left ) ) { if( p.x > 0 ) sPaddle.move( - 6, 0 ); } if( isCollide( sBall, sPaddle ) ) { dy = -( rand() % 6 ) + 2; } window.clear( sf::Color::Black ); window.draw( sBackground ); window.draw( sBall ); window.draw( sPaddle ); for( int i = 0; i < n; i++ ) window.draw( block[ i ] ); window.display(); } return 0; }
|
|
pekfos |
» 2017-12-19 21:43:02 1. Czemu nie zapytasz tego 'gościa'? 2. Property pages. |
|
Lentyl Temat założony przez niniejszego użytkownika |
» 2017-12-19 23:16:32 Mógłbyś dookreślić 2 |
|
pekfos |
» 2017-12-20 00:05:31 |
|
j23 |
» 2017-12-20 10:46:11 W VC możesz dość prosto stworzyć szablon projektu aplikacji - poszukaj info o tym. |
|
Janusz2 |
» 2017-12-20 16:50:05 Mógłbyś dokładnie określić, gdzie Twoim zdaniem dochodzi do zmniejsznia szybkości piłki? W przytoczonej przez Ciebie metodzie Ball.move(dx,0) wartość dx nie jest w żaden sposób zmieniana, z kolei fragment dx=-dx jedynie odwraca kierunek ale szybkosc pozostaje ta sama. |
|
« 1 » |