int main (int argc, const char * argv[]) { mainWindow = new sf::RenderWindow(sf::VideoMode(1440,900), "Alpha & Omega",sf::Style::Fullscreen); ezCursor cursor; std::vector<std::string> klm; getFileList(getResourcePath(0), "ttf", klm); // std::cout<<klm.size()<<std::endl; sf::Texture texture; if (!texture.loadFromFile(getResourcePath(1) + "davsan.png")) return EXIT_FAILURE; sf::Texture background; if(!background.loadFromFile(getResourcePath(1)+"ConfusedOrc.png")) return EXIT_FAILURE; sf::Sprite backSprite(background); backSprite.setPosition(0, 0); sf::Sprite back1(background); back1.setPosition(backSprite.getPosition().x+backSprite.getGlobalBounds().width, backSprite.getPosition().y); sf::Sprite back2(background); back2.setPosition(back1.getPosition().x+back1.getGlobalBounds().width, back1.getPosition().y); sf::Sprite sprite(texture); sprite.setPosition(720, 450); sf::Clock frameClock; int i=0,j=0; sf::View view = mainWindow->getView(); sf::View newView(sf::FloatRect(0,0,1440,900)); mainWindow->setFramerateLimit(90); while (mainWindow->isOpen()) { // Process events mainWindow->clear(); sf::Event event; while (mainWindow->pollEvent(event)) { // Close window : exit if (event.type == sf::Event::Closed) mainWindow->close(); // Escape pressed : exit if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) mainWindow->close(); if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Left) { newView.move(-10,0); } if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Right) { newView.move(10,0); } if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Up) { newView.move(0,-10); } if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Down) { newView.move(0,10); } } //sf::FloatRect rect(sf::Vector2f(view.getCenter() - sf::Vector2f(view.getSize().x/2, view.getSize().y/2)), sf::Vector2f(view.getSize())); //sprite.setPosition(rect.left+(rect.width/2), rect.top+(rect.height/2)); // sf::Vector2f paka=mainWindow->convertCoords(sf::Vector2i(ty,kl), view); // sf::Mouse::setPosition(sf::Vector2i(paka.x,paka.y)); if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) { std::cout<<"Mouse = "<<cursor.getPosition(newView).x<<" "<<cursor.getPosition(newView).y<<std::endl; std::cout<<"img = "<<back2.getGlobalBounds().left<<" "<<back2.getGlobalBounds().top<<std::endl; } //sprite.move(8.f*frameClock.getElapsedTime().asSeconds(),0.f*frameClock.getElapsedTime().asSeconds()); if(frameClock.getElapsedTime().asMilliseconds() >= 10000/100) { frameClock.restart(); i++; if(i==11) { j++; i=0; } if(j==5) { j=0; } } // std::cout<<i<<" "<<j<<std::endl; sprite.setTextureRect(sf::IntRect(100*i,120*0,100,120)); //sprite2.setTextureRect(sf::IntRect(100*i,120*0,100,120)); // Clear screen mainWindow->setView(newView); mainWindow->draw(backSprite); mainWindow->draw(back1); mainWindow->draw(back2); // Draw the sprite mainWindow->setView(mainWindow->getDefaultView()); mainWindow->draw(sprite); cursor.render(); mainWindow->display(); } return EXIT_SUCCESS; }
int main() { sf::RenderWindow window(sf::VideoMode(500, 500), "Spinning card effect"); window.setFramerateLimit(60); const std::string faceTextureFilename{ "resources/Card Face - SFML.png" }; const std::string backTextureFilename{ "resources/Card Back - SFML.png" }; sf::Texture faceTexture; if (!faceTexture.loadFromFile(faceTextureFilename)) return EXIT_FAILURE; faceTexture.setSmooth(true); sf::Sprite faceSprite(faceTexture); sf::Texture backTexture; if (!backTexture.loadFromFile(backTextureFilename)) return EXIT_FAILURE; backTexture.setSmooth(true); sf::Sprite backSprite(backTexture); // set up and position cards const sf::Vector2f positionOfSpinningCard { static_cast<float>(window.getSize().x) / 2, static_cast<float>(window.getSize().y) / 2 }; faceSprite.setOrigin(faceSprite.getLocalBounds().width / 2, faceSprite.getLocalBounds().height / 2); backSprite.setOrigin(backSprite.getLocalBounds().width / 2, backSprite.getLocalBounds().height / 2); faceSprite.setPosition(positionOfSpinningCard); backSprite.setPosition(positionOfSpinningCard); faceSprite.setRotation(10); backSprite.setRotation(10); //faceSprite.setColor(sf::Color::Blue); //backSprite.setColor(sf::Color::Green); // prepare spinning card (one for face and one for back) sw::SpinningCard cardFace(faceSprite); sw::SpinningCard cardBack(backSprite); // spinDepth is depth of fake perspective is based on the size of the object (height when flipping horizontally, width when flipping vertically) // the higher the depth, the more "fake" it looks. if higher than 1, corners cross const float spinDepth { 0.15f }; cardFace.setDepth(spinDepth); cardBack.setDepth(spinDepth); // spin control bool isSpinning{ false }; const float anglePerSecond{ 521.21f }; float spinAngle{ 0.f }; const bool spinVertically{ false }; // spin horizontally (around the y axis) or vertically (around the x axis) sf::Clock clock; while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if ((event.type == sf::Event::Closed) || (event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)) window.close(); if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::Space) { isSpinning = true; clock.restart(); } } } // update card spin if (isSpinning) { spinAngle = clock.getElapsedTime().asSeconds() * anglePerSecond; if (spinAngle >= 360.f) { spinAngle = 0.f; isSpinning = false; } if (spinVertically) { cardFace.spinVertically(spinAngle + 180); // show the face the correct way around cardBack.spinVertically(spinAngle); } else { cardFace.spin(spinAngle + 180); // show the face the correct way around cardBack.spin(spinAngle); } // smoothly move "out" when spinning const float scale { 1.f + (0.5f * sin(spinAngle * 3.14159f / 360)) }; cardFace.setScale(scale, scale); cardBack.setScale(scale, scale); } window.clear(); // side cards (must return for the central card) backSprite.move(-120, 0); backSprite.rotate(-2); window.draw(backSprite); backSprite.move(240, 0); backSprite.rotate(4); window.draw(backSprite); backSprite.move(-120, 0); backSprite.rotate(-2); // central card if (isSpinning) { if ((spinAngle > 90) && (spinAngle < 270)) window.draw(cardFace); else window.draw(cardBack); } else window.draw(backSprite); window.display(); } return 0; }