Beispiel #1
0
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;
}